ant-design-blazor/components/date-picker/internal/DatePickerPanelBase.cs
Nino Padrutt 5809c80011 feat(module: date-picker): support localization (#803)
* start trying to add a different first day of the week based on localization.

* add first day of week parameter and get weekday local  from .net

* fix some issues

* extend demo

* remove no longed needed Locale parameter

* fix range for selection

* add german localization

* add entry for API section

* remove obsolet things from the react ant documentation

* add description to chart documentation

* translate general configuration to english.

* code cleanup

* use LocalProvider to get first day of week.

* use localeprovider instead of date picker localization

* remove no longer used parameter

* delete no longer used interface

* change from enum to string due to parsing issue.

* add missing formats and use culture info from localprovider

* correct locales

* us Sunday as a default

* remove no longer used culture info parameter

* adjust locales

* add parameter for Locale instead of directly accessing it.

* add inheritance to access locale

* typo

* readd culture info parameter

* fixes for locale jsons

* adjust demo and api

* small adjustments on docs, set monday in chinese as first day of the week.

* use locale in calendar as well.

* adjust docs

* use enum

* adjust demo

* adjust for different starting date.

* add defaults for DatePickerLocale

* add short week days to locale files

* use days from locale file

* code cleanup

use consts instead of magic numbers, add code comment and use dayOfWeek As param instead of the whole locale object. Remove no longed used method.

* not sure about the chinese translation so I remove them

* Revert "not sure about the chinese translation so I remove them"

This reverts commit 54017513c7b684494cf06184b4051a4dcfc43850.
2020-11-25 11:08:12 +08:00

214 lines
6.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using AntDesign.Internal;
using Microsoft.AspNetCore.Components;
namespace AntDesign
{
public class DatePickerPanelBase<TValue> : PickerPanelBase
{
[CascadingParameter]
public IDatePicker DatePicker { get; set; }
[Parameter]
public string PrefixCls { get; set; }
[Parameter]
public string Picker { get; set; }
[Parameter]
public bool IsRange { get; set; } = false;
[Parameter]
public bool IsCalendar { get; set; } = false;
[Parameter]
public bool IsShowHeader { get; set; } = true;
[Parameter]
public DatePickerLocale Locale { get; set; }
[Parameter]
public CultureInfo CultureInfo { get; set; }
[Parameter]
public Action ClosePanel { get; set; }
[Parameter]
public Action<DateTime, int> ChangePickerValue { get; set; }
[Parameter]
public Action<DateTime, int> ChangeValue { get; set; }
[Parameter]
public Action<string, int> ChangePickerType { get; set; }
[Parameter]
public Func<int, DateTime> GetIndexPickerValue { get; set; }
[Parameter]
public Func<int, DateTime?> GetIndexValue { get; set; }
[Parameter]
public Func<DateTime, bool> DisabledDate { get; set; } = null;
/// <summary>
/// for Calendar.DateFullCellRender、DatePicker.DateRender
/// </summary>
[Parameter]
public Func<DateTime, DateTime, RenderFragment> DateRender { get; set; }
/// <summary>
/// for Calendar.MonthFullCellRender、DatePicker.MonthCellRender
/// </summary>
[Parameter]
public Func<DateTime, RenderFragment> MonthCellRender { get; set; }
/// <summary>
/// for Calendar.DateCellRender
/// </summary>
[Parameter]
public Func<DateTime, RenderFragment> CalendarDateRender { get; set; }
/// <summary>
/// for Calendar.MonthCellRender
/// </summary>
[Parameter]
public Func<DateTime, RenderFragment> CalendarMonthCellRender { get; set; }
[Parameter]
public RenderFragment RenderExtraFooter { get; set; }
protected Dictionary<string, object> GetAttritubes()
{
return new Dictionary<string, object>()
{
{ "PrefixCls", PrefixCls },
{ "Picker", Picker },
{ "Locale", Locale },
{ "CultureInfo", CultureInfo },
{ "ClosePanel", ClosePanel },
{ "ChangePickerValue", ChangePickerValue },
{ "ChangeValue", ChangeValue },
{ "ChangePickerType", ChangePickerType },
{ "GetIndexPickerValue", GetIndexPickerValue },
{ "GetIndexValue", GetIndexValue },
{ "DisabledDate", DisabledDate },
{ "DateRender", DateRender },
{ "MonthCellRender", MonthCellRender },
{ "CalendarDateRender", CalendarDateRender },
{ "CalendarMonthCellRender", CalendarMonthCellRender },
{ "RenderExtraFooter", RenderExtraFooter },
{ "IsRange", IsRange },
{ "PickerIndex", PickerIndex },
{ "IsCalendar", IsCalendar },
{ "IsShowHeader", IsShowHeader },
};
}
protected void OnSelectTime(DateTime date)
{
OnSelect?.Invoke(date, PickerIndex);
}
protected void OnSelectDate(DateTime date)
{
OnSelect?.Invoke(CombineNewShowDate(year: date.Year, month: date.Month, day: date.Day), PickerIndex);
}
protected void OnSelectYear(DateTime date)
{
OnSelect?.Invoke(CombineNewShowDate(year: date.Year), PickerIndex);
}
protected void OnSelectQuarter(DateTime date)
{
OnSelect?.Invoke(CombineNewShowDate(month: date.Month), PickerIndex);
}
protected void OnSelectMonth(DateTime date)
{
OnSelect?.Invoke(CombineNewShowDate(month: date.Month), PickerIndex);
}
protected void OnSelectDay(DateTime date)
{
OnSelect?.Invoke(CombineNewShowDate(day: date.Day), PickerIndex);
}
protected void OnSelectHour(DateTime date)
{
OnSelect?.Invoke(CombineNewShowDate(hour: date.Hour), PickerIndex);
}
protected void OnSelectMinute(DateTime date)
{
OnSelect?.Invoke(CombineNewShowDate(minute: date.Minute), PickerIndex);
}
protected void OnSelectSecond(DateTime date)
{
OnSelect?.Invoke(CombineNewShowDate(second: date.Second), PickerIndex);
}
protected void OnSelectShowYear(DateTime date)
{
ChangePickerValue(CombineNewShowDate(year: date.Year), PickerIndex);
}
protected void OnSelectShowMonth(DateTime date)
{
ChangePickerValue(CombineNewShowDate(month: date.Month), PickerIndex);
}
protected void OnSelectShowDay(DateTime date)
{
ChangePickerValue(CombineNewShowDate(day: date.Day), PickerIndex);
}
protected DateTime CombineNewShowDate(
int? year = null,
int? month = null,
int? day = null,
int? hour = null,
int? minute = null,
int? second = null)
{
return DateHelper.CombineNewDate(
PickerValue,
year,
month,
day,
hour,
minute,
second
);
}
protected void ChangePickerYearValue(int interval)
{
ChangePickerValue(PickerValue.AddYears(interval), PickerIndex);
}
protected void ChangePickerMonthValue(int interval)
{
ChangePickerValue(PickerValue.AddMonths(interval), PickerIndex);
}
protected void Close()
{
ClosePanel?.Invoke();
}
protected DateTime PickerValue { get => GetIndexPickerValue(PickerIndex); }
protected DateTime Value { get => GetIndexValue(PickerIndex) ?? DateTime.Now; }
public void PopUpPicker(string type)
{
ChangePickerType(type, PickerIndex);
}
}
}