コード例 #1
0
        /// <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();
        }
コード例 #2
0
        /// <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();
        }
コード例 #3
0
        /// <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();
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        /// <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();
            }
        }