Skip to content

Commit

Permalink
✨ Numeric Date Entry - enable custom culture
Browse files Browse the repository at this point in the history
  • Loading branch information
JosselinTILLAY committed Mar 18, 2024
1 parent 35750c4 commit 9bc1853
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public void FilledUncorrectDate(string day, string month, string year)
[InlineData("it-IT", "JJ", "MM", "AA")]
[InlineData("ru-RU", "JJ", "MM", "AA")]
[InlineData("ro-RO", "JJ", "MM", "AA")]
[InlineData("us-US", "DD", "MM", "YY")]
[InlineData("en-US", "DD", "MM", "YY")]
[InlineData("en-EN", "DD", "MM", "YY")]
public void DefaultPlaceholder(string culture, string day, string month, string year)
{
Expand All @@ -63,7 +63,7 @@ public void DefaultPlaceholder(string culture, string day, string month, string
[InlineData("it-IT", "06", "10")]
[InlineData("ro-RO", "06", "10")]
[InlineData("ru-RU", "06", "10")]
[InlineData("us-US", "10", "06")]
[InlineData("en-US", "10", "06")]
[InlineData("en-EN", "10", "06")]
public void MonthDayOrderCulture(string culture, string expectedFirst, string expectedSecond)
{
Expand All @@ -74,6 +74,23 @@ public void MonthDayOrderCulture(string culture, string expectedFirst, string ex
CheckNumericDateEntry(entry, expectedFirst, expectedSecond, "2022");
}

[Theory]
[InlineData("fr-FR", "th-TH", 2024, "67")]
[InlineData("th-TH", "fr-FR", 2024, "81")]
[InlineData("fr-FR", "fr-FR", 2024, "24")]
public void CustomCulture(string deviceCulture, string customCulture, int year, string expectedYear)
{
SetCulture(deviceCulture);

var entry = new NumericDateEntry();
entry.Culture = new CultureInfo(customCulture);
entry.DatePlaceholder = new DateTime(year, 10, 6, Thread.CurrentThread.CurrentCulture.Calendar);

Check.That(entry.DayEntry.Placeholder).IsEqualTo("06");
Check.That(entry.MonthEntry.Placeholder).IsEqualTo("10");
Check.That(entry.YearEntry.Placeholder).IsEqualTo(expectedYear);
}

private void SetCulture(string culture)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
Expand Down
35 changes: 24 additions & 11 deletions Smartway.UiComponent/Inputs/NumericDateEntry.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,21 @@ public ICommand ErrorCommand
set => SetValue(ErrorCommandProperty, value);
}

private CultureInfo _culture;
public CultureInfo Culture
{
get
{
if (_culture != null)
{
return _culture;
}

return CultureInfo.CurrentCulture;
}
set => _culture = value;
}

private List<Entry> _dateEntries;
public Entry DayEntry;
public Entry MonthEntry;
Expand Down Expand Up @@ -98,7 +113,7 @@ protected virtual DateTime GetFilledDate()
{
var day = int.Parse(DayEntry.Text);
var month = int.Parse(MonthEntry.Text);
var year = CultureInfo.CurrentCulture.Calendar.ToFourDigitYear(int.Parse(YearEntry.Text));
var year = Culture.Calendar.ToFourDigitYear(int.Parse(YearEntry.Text));

return new DateTime(year, month, day);
}
Expand Down Expand Up @@ -158,9 +173,9 @@ private void SetEntriesPlaceHolders()

private void SetDateTimePlaceholder()
{
DayEntry.Placeholder = DatePlaceholder.ToString("dd");
MonthEntry.Placeholder = DatePlaceholder.ToString("MM");
YearEntry.Placeholder = DatePlaceholder.ToString("yy");
DayEntry.Placeholder = DatePlaceholder.ToString("dd", Culture);
MonthEntry.Placeholder = DatePlaceholder.ToString("MM", Culture);
YearEntry.Placeholder = DatePlaceholder.ToString("yy", Culture);
}

protected virtual void SetFilledDate()
Expand All @@ -170,9 +185,9 @@ protected virtual void SetFilledDate()

var date = (DateTime)FilledDateTime;

DayEntry.Text = date.ToString("dd");
MonthEntry.Text = date.ToString("MM");
YearEntry.Text = date.ToString("yy");
DayEntry.Text = date.ToString("dd", Culture);
MonthEntry.Text = date.ToString("MM", Culture);
YearEntry.Text = date.ToString("yy", Culture);
}

private void SetEntriesPosition()
Expand Down Expand Up @@ -221,15 +236,13 @@ private void SetDefaultPlaceholder()

private bool IsDayMonthCalendar()
{
var calendarType =
CultureInfo.GetCultureInfo(CultureInfo.CurrentCulture.Name).DateTimeFormat.MonthDayPattern;
var calendarType = Culture.DateTimeFormat.MonthDayPattern;
return calendarType.IndexOf("d") < calendarType.IndexOf("M");
}

private bool IsYearsFirstCalendar()
{
var calendarType =
CultureInfo.GetCultureInfo(CultureInfo.CurrentCulture.Name).DateTimeFormat.YearMonthPattern;
var calendarType = Culture.DateTimeFormat.YearMonthPattern;
return calendarType.IndexOf("y") < calendarType.IndexOf("M");
}

Expand Down

0 comments on commit 9bc1853

Please sign in to comment.