#seed #datepicker #gui

seed-datepicker

Seed框架的自定义日期选择器组件

6个版本 (稳定)

1.1.0 2022年4月8日
1.0.2 2021年4月30日
1.0.0 2021年3月17日
0.1.1 2021年3月12日

#450 in WebAssembly

Apache-2.0

15KB
339

Seed Datepicker

CI Actions Status Build Examples Actions Status Crates IO badge unsafe forbidden dependency status

这是一个可定制的日期选择器组件,用于Seed框架,使用Chrono进行日期结构。

此crate提供了Seed框架的实现,但大部分实现不依赖于Seed框架,位于chrono-datepicker-core crate中。

如果您想使用这个库,可以使用提供的示例scss样式在此处,或者您可以为它创建自己的样式,您只需使用正确的类名及其嵌套即可。

部署示例

查看部署示例

用法

查看示例

视图和选择

日期选择器对话框有3种不同的DialogViewType,如下所示

DialogViewType::年份

显示从当前年份开始的20年内的选择,其中modulo 20 == 0

点击对话框标题没有效果。

  • 如果selection_type == DialogViewType::Years,则点击年份
    • 选择该年的1月1日(因为底层存储类型是chrono中的NaiveDate
  • 如果selection_type != DialogViewType::Years,则点击年份
    • DialogViewType更改为DialogViewType::Months

Rendered years view

DialogViewType::月份

显示特定年份的12个月的选择。

点击对话框标题将DialogViewType更改为DialogViewType::Years

  • 如果selection_type == DialogViewType::Months,则点击月份
    • 选择所选月份的第一天(因为底层存储类型是chrono中的NaiveDate
  • 如果selection_type == DialogViewType::Days,则点击月份
    • DialogViewType 修改为 DialogViewType::Days 以显示该月的天数。

Rendered months view

DialogViewType::Days

显示特定月份的所有天数中的选择。

点击对话框的标题,将 DialogViewType 修改为 DialogViewType::Months

  • 点击某一天,将该日期作为 NaiveDate 选择。

Rendered days view

约束条件

init 方法配置日期选择器时,可以应用各种约束,例如

let config = PickerConfigBuilder::default()
        .date_constraints(
            DateConstraintsBuilder::default()
                // earliest selectable date
                .min_date(NaiveDate::from_ymd(2020, 12, 1))
                // latest selectable date
                .max_date(NaiveDate::from_ymd(2022, 12, 14))
                // chrono Weekday-s that can be disabled
                .disabled_weekdays([Weekday::Sat, Weekday::Sun].iter().cloned().collect())
                // entire chrono Month-s that can be disabled
                .disabled_months([Month::July, Month::August].iter().cloned().collect())
                // entire years that can be disabled
                .disabled_years([2021].iter().cloned().collect())
                // a particular day of month that is disabled in all months
                .disabled_monthly_dates([13].iter().cloned().collect())
                // particular dates that are disabled each year (the year number is ignored here)
                .disabled_yearly_dates(vec![
                    NaiveDate::from_ymd(1, 12, 24),
                    NaiveDate::from_ymd(1, 12, 25),
                    NaiveDate::from_ymd(1, 12, 26),
                ])
                // particular unique dates that can be disabled
                .disabled_unique_dates([NaiveDate::from_ymd(2020, 12, 8)].iter().cloned().collect())
                .build()
                .unwrap(),
        )
        .build()
        .unwrap();

依赖关系

~13-21MB
~295K SLoC