/// <inheritdoc/> protected override async Task OnFirstAfterRenderAsync() { object defaultDate = null; // for multiple mode default dates must be set as array if (SelectionMode != DateInputSelectionMode.Single) { defaultDate = Dates?.Select(x => FormatValueAsString(new TValue[] { x }))?.ToArray(); } else { defaultDate = FormatValueAsString(new TValue[] { Date }); } await JSModule.Initialize(ElementRef, ElementId, new { InputMode, SelectionMode = SelectionMode.ToDateInputSelectionMode(), FirstDayOfWeek = (int)FirstDayOfWeek, DisplayFormat = DateTimeFormatConverter.Convert(DisplayFormat), TimeAs24hr, DefaultDate = defaultDate, Min = Min?.ToString(DateFormat), Max = Max?.ToString(DateFormat), Disabled, ReadOnly, DisabledDates = DisabledDates?.Select(x => FormatValueAsString(new TValue[] { x })), Localization = GetLocalizationObject() }); await base.OnFirstAfterRenderAsync(); }
/// <inheritdoc/> protected override async Task OnFirstAfterRenderAsync() { await JSModule.Initialize(ElementRef, ElementId, new { InputMode, FirstDayOfWeek, DisplayFormat = DateTimeFormatConverter.Convert(DisplayFormat), TimeAs24hr, Default = FormatValueAsString(Date), Min = Min?.ToString(DateFormat), Max = Max?.ToString(DateFormat), Disabled, ReadOnly, DisabledDates = DisabledDates?.Select(x => FormatValueAsString(x)), }); await base.OnFirstAfterRenderAsync(); }
/// <inheritdoc/> public override async Task SetParametersAsync(ParameterView parameters) { var dateChanged = parameters.TryGetValue <TValue>(nameof(Date), out var date) && !Date.Equals(date); var minChanged = parameters.TryGetValue(nameof(Min), out DateTimeOffset? min) && !Min.IsEqual(min); var maxChanged = parameters.TryGetValue(nameof(Max), out DateTimeOffset? max) && !Max.IsEqual(max); var firstDayOfWeekChanged = parameters.TryGetValue(nameof(FirstDayOfWeek), out DayOfWeek firstDayOfWeek) && !FirstDayOfWeek.IsEqual(firstDayOfWeek); var displayFormatChanged = parameters.TryGetValue(nameof(DisplayFormat), out string displayFormat) && DisplayFormat != displayFormat; var timeAs24hrChanged = parameters.TryGetValue(nameof(TimeAs24hr), out bool timeAs24hr) && TimeAs24hr != timeAs24hr; var disabledChanged = parameters.TryGetValue(nameof(Disabled), out bool disabled) && Disabled != disabled; var readOnlyChanged = parameters.TryGetValue(nameof(ReadOnly), out bool readOnly) && ReadOnly != readOnly; var disabledDatesChanged = parameters.TryGetValue(nameof(DisabledDates), out IEnumerable <TValue> disabledDates) && !DisabledDates.AreEqual(disabledDates); if (dateChanged) { var dateString = FormatValueAsString(date); await CurrentValueHandler(dateString); if (Rendered) { ExecuteAfterRender(async() => await JSModule.UpdateValue(ElementRef, ElementId, dateString)); } } if (Rendered && (minChanged || maxChanged || firstDayOfWeekChanged || displayFormatChanged || timeAs24hrChanged || disabledChanged || readOnlyChanged || disabledDatesChanged)) { ExecuteAfterRender(async() => await JSModule.UpdateOptions(ElementRef, ElementId, new { FirstDayOfWeek = new { Changed = firstDayOfWeekChanged, Value = (int)firstDayOfWeek }, DisplayFormat = new { Changed = displayFormatChanged, Value = DateTimeFormatConverter.Convert(displayFormat) }, TimeAs24hr = new { Changed = timeAs24hrChanged, Value = timeAs24hr }, Min = new { Changed = minChanged, Value = min?.ToString(DateFormat) }, Max = new { Changed = maxChanged, Value = max?.ToString(DateFormat) }, Disabled = new { Changed = disabledChanged, Value = disabled }, ReadOnly = new { Changed = readOnlyChanged, Value = readOnly }, DisabledDates = new { Changed = disabledDatesChanged, Value = disabledDates?.Select(x => FormatValueAsString(x)) }, })); } // Let blazor do its thing! await base.SetParametersAsync(parameters); if (ParentValidation != null) { if (parameters.TryGetValue <Expression <Func <TValue> > >(nameof(DateExpression), out var expression)) { await ParentValidation.InitializeInputExpression(expression); } if (parameters.TryGetValue <string>(nameof(Pattern), out var pattern)) { // make sure we get the newest value var value = parameters.TryGetValue <TValue>(nameof(Date), out var inDate) ? inDate : InternalValue; await ParentValidation.InitializeInputPattern(pattern, value); } await InitializeValidation(); } }
public override View GetView(int position, View convertView, ViewGroup parent) { var inflater = (LayoutInflater)_context.GetSystemService(Context.LayoutInflaterService); var cellView = convertView; // For reuse if (convertView == null) { cellView = inflater.Inflate(Resource.Layout.CustomCell, null); } var paddingTop = cellView.PaddingTop; var paddingLeft = cellView.PaddingLeft; var paddingBottom = cellView.PaddingBottom; var paddingRight = cellView.PaddingRight; TextView tv1 = cellView.FindViewById <TextView>(Resource.Id.tv1); TextView tv2 = cellView.FindViewById <TextView>(Resource.Id.tv2); tv1.SetTextColor(Color.Black); // Get dateTime of this cell var dateTime = DateTimes[position]; var resources = _context.Resources; // Set color of the dates in previous / next month if (dateTime.Month != _month) { var resource = Caldroid.Xamarin.Resource.Color.caldroid_darker_gray; var color = new Color(ContextCompat.GetColor(_context, resource)); tv1.SetTextColor(color); } var shouldResetDiabledView = false; var shouldResetSelectedView = false; // Customize for disabled dates and date outside min/max dates if ((MinDate != null && dateTime.Date < MinDate.Value.Date) || (MaxDate != null && dateTime.Date > MaxDate.Value.Date) || (DisabledDates != null && DisabledDates.Contains(dateTime))) { tv1.SetTextColor(CaldroidFragment.DisabledTextColor); if (CaldroidFragment.DisabledBackgroundDrawable == -1) { cellView.SetBackgroundResource(Caldroid.Xamarin.Resource.Drawable.disable_cell); } else { cellView.SetBackgroundResource(CaldroidFragment.DisabledBackgroundDrawable); } if (dateTime.Date == DateTime.Now.Date) { cellView.SetBackgroundResource(Caldroid.Xamarin.Resource.Drawable.red_border_gray_bg); } } else { shouldResetDiabledView = true; } // Customize for selected dates if (SelectedDates != null && SelectedDates.Contains(dateTime)) { var resource = Caldroid.Xamarin.Resource.Color.caldroid_sky_blue; var color = new Color(ContextCompat.GetColor(_context, resource)); cellView.SetBackgroundColor(color); tv1.SetTextColor(Color.Black); } else { shouldResetSelectedView = true; } if (shouldResetDiabledView && shouldResetSelectedView) { // Customize for today if (dateTime.Date == DateTime.Now.Date) { cellView.SetBackgroundResource(Caldroid.Xamarin.Resource.Drawable.red_border); } else { cellView.SetBackgroundResource(Caldroid.Xamarin.Resource.Drawable.cell_bg); } } tv1.Text = "" + dateTime.ToString("dd"); tv2.Text = "Hi"; // Somehow after setBackgroundResource, the padding collapse. // This is to recover the padding cellView.SetPadding(paddingLeft, paddingTop, paddingRight, paddingBottom); // Set custom color if required SetCustomResources(dateTime, cellView, tv1); return(cellView); }
/// <inheritdoc/> public override async Task SetParametersAsync(ParameterView parameters) { var dateChanged = parameters.TryGetValue <TValue>(nameof(Date), out var paramDate) && !Date.Equals(paramDate); var datesChanged = parameters.TryGetValue(nameof(Dates), out IEnumerable <TValue> paramDates) && !Dates.AreEqual(paramDates); var minChanged = parameters.TryGetValue(nameof(Min), out DateTimeOffset? paramMin) && !Min.IsEqual(paramMin); var maxChanged = parameters.TryGetValue(nameof(Max), out DateTimeOffset? paramMax) && !Max.IsEqual(paramMax); var firstDayOfWeekChanged = parameters.TryGetValue(nameof(FirstDayOfWeek), out DayOfWeek paramFirstDayOfWeek) && !FirstDayOfWeek.IsEqual(paramFirstDayOfWeek); var displayFormatChanged = parameters.TryGetValue(nameof(DisplayFormat), out string paramDisplayFormat) && DisplayFormat != paramDisplayFormat; var timeAs24hrChanged = parameters.TryGetValue(nameof(TimeAs24hr), out bool paramTimeAs24hr) && TimeAs24hr != paramTimeAs24hr; var disabledChanged = parameters.TryGetValue(nameof(Disabled), out bool paramDisabled) && Disabled != paramDisabled; var readOnlyChanged = parameters.TryGetValue(nameof(ReadOnly), out bool paramReadOnly) && ReadOnly != paramReadOnly; var disabledDatesChanged = parameters.TryGetValue(nameof(DisabledDates), out IEnumerable <TValue> paramDisabledDates) && !DisabledDates.AreEqual(paramDisabledDates); var selectionModeChanged = parameters.TryGetValue(nameof(SelectionMode), out DateInputSelectionMode paramSelectionMode) && !SelectionMode.IsEqual(paramSelectionMode); var inlineChanged = parameters.TryGetValue(nameof(Inline), out bool paramInline) && Inline != paramInline; if (dateChanged || datesChanged) { var formatedDateString = SelectionMode != DateInputSelectionMode.Single ? FormatValueAsString(paramDates?.ToArray()) : FormatValueAsString(new TValue[] { paramDate }); await CurrentValueHandler(formatedDateString); if (Rendered) { ExecuteAfterRender(async() => await JSModule.UpdateValue(ElementRef, ElementId, formatedDateString)); } } if (Rendered && (minChanged || maxChanged || firstDayOfWeekChanged || displayFormatChanged || timeAs24hrChanged || disabledChanged || readOnlyChanged || disabledDatesChanged || selectionModeChanged || inlineChanged)) { ExecuteAfterRender(async() => await JSModule.UpdateOptions(ElementRef, ElementId, new { FirstDayOfWeek = new { Changed = firstDayOfWeekChanged, Value = (int)paramFirstDayOfWeek }, DisplayFormat = new { Changed = displayFormatChanged, Value = DateTimeFormatConverter.Convert(paramDisplayFormat) }, TimeAs24hr = new { Changed = timeAs24hrChanged, Value = paramTimeAs24hr }, Min = new { Changed = minChanged, Value = paramMin?.ToString(DateFormat) }, Max = new { Changed = maxChanged, Value = paramMax?.ToString(DateFormat) }, Disabled = new { Changed = disabledChanged, Value = paramDisabled }, ReadOnly = new { Changed = readOnlyChanged, Value = paramReadOnly }, DisabledDates = new { Changed = disabledDatesChanged, Value = paramDisabledDates?.Select(x => FormatValueAsString(new TValue[] { x })) }, SelectionMode = new { Changed = selectionModeChanged, Value = paramSelectionMode }, Inline = new { Changed = inlineChanged, Value = paramInline }, })); } // Let blazor do its thing! await base.SetParametersAsync(parameters); if (ParentValidation != null) { if (parameters.TryGetValue <Expression <Func <TValue> > >(nameof(DateExpression), out var expression)) { await ParentValidation.InitializeInputExpression(expression); } if (parameters.TryGetValue <string>(nameof(Pattern), out var pattern)) { // make sure we get the newest value var value = parameters.TryGetValue <TValue>(nameof(Date), out var inDate) ? new TValue[] { inDate } : InternalValue; await ParentValidation.InitializeInputPattern(pattern, value); } await InitializeValidation(); } }