Search, Paging, and "As of" Date #10
@ -37,6 +37,51 @@ module RequestType =
|
|||||||
|
|
||||||
(*-- SUPPORT TYPES --*)
|
(*-- SUPPORT TYPES --*)
|
||||||
|
|
||||||
|
/// How as-of dates should (or should not) be displayed with requests
|
||||||
|
type AsOfDateDisplay =
|
||||||
|
/// No as-of date should be displayed
|
||||||
|
| NoDisplay
|
||||||
|
/// The as-of date should be displayed in the culture's short date format
|
||||||
|
| ShortDate
|
||||||
|
/// The as-of date should be displayed in the culture's long date format
|
||||||
|
| LongDate
|
||||||
|
with
|
||||||
|
/// Convert to a DU case from a single-character string
|
||||||
|
static member fromCode code =
|
||||||
|
match code with
|
||||||
|
| "N" -> NoDisplay
|
||||||
|
| "S" -> ShortDate
|
||||||
|
| "L" -> LongDate
|
||||||
|
| _ -> invalidArg "code" (sprintf "Unknown code %s" code)
|
||||||
|
/// Convert this DU case to a single-character string
|
||||||
|
member this.toCode () =
|
||||||
|
match this with
|
||||||
|
| NoDisplay -> "N"
|
||||||
|
| ShortDate -> "S"
|
||||||
|
| LongDate -> "L"
|
||||||
|
|
||||||
|
|
||||||
|
[<AutoOpen>]
|
||||||
|
module Converters =
|
||||||
|
open Microsoft.EntityFrameworkCore.Storage.ValueConversion
|
||||||
|
open Microsoft.FSharp.Linq.RuntimeHelpers
|
||||||
|
open System.Linq.Expressions
|
||||||
|
|
||||||
|
let private fromDU =
|
||||||
|
<@ Func<AsOfDateDisplay, string>(fun (x : AsOfDateDisplay) -> x.toCode ()) @>
|
||||||
|
|> LeafExpressionConverter.QuotationToExpression
|
||||||
|
|> unbox<Expression<Func<AsOfDateDisplay, string>>>
|
||||||
|
|
||||||
|
let private toDU =
|
||||||
|
<@ Func<string, AsOfDateDisplay>(AsOfDateDisplay.fromCode) @>
|
||||||
|
|> LeafExpressionConverter.QuotationToExpression
|
||||||
|
|> unbox<Expression<Func<string, AsOfDateDisplay>>>
|
||||||
|
|
||||||
|
/// Conversion between a string and an AsOfDateDisplay DU value
|
||||||
|
type AsOfDateDisplayConverter () =
|
||||||
|
inherit ValueConverter<AsOfDateDisplay, string> (fromDU, toDU)
|
||||||
|
|
||||||
|
|
||||||
/// Statistics for churches
|
/// Statistics for churches
|
||||||
[<NoComparison; NoEquality>]
|
[<NoComparison; NoEquality>]
|
||||||
type ChurchStats =
|
type ChurchStats =
|
||||||
@ -158,6 +203,8 @@ and [<CLIMutable; NoComparison; NoEquality>] ListPreferences =
|
|||||||
timeZone : TimeZone
|
timeZone : TimeZone
|
||||||
/// The number of requests displayed per page
|
/// The number of requests displayed per page
|
||||||
pageSize : int
|
pageSize : int
|
||||||
|
/// How the as-of date should be automatically displayed
|
||||||
|
asOfDateDisplay : AsOfDateDisplay
|
||||||
}
|
}
|
||||||
with
|
with
|
||||||
/// A set of preferences with their default values
|
/// A set of preferences with their default values
|
||||||
@ -180,6 +227,7 @@ and [<CLIMutable; NoComparison; NoEquality>] ListPreferences =
|
|||||||
timeZoneId = "America/Denver"
|
timeZoneId = "America/Denver"
|
||||||
timeZone = TimeZone.empty
|
timeZone = TimeZone.empty
|
||||||
pageSize = 100
|
pageSize = 100
|
||||||
|
asOfDateDisplay = NoDisplay
|
||||||
}
|
}
|
||||||
/// Configure EF for this entity
|
/// Configure EF for this entity
|
||||||
static member internal configureEF (mb : ModelBuilder) =
|
static member internal configureEF (mb : ModelBuilder) =
|
||||||
@ -268,8 +316,16 @@ and [<CLIMutable; NoComparison; NoEquality>] ListPreferences =
|
|||||||
.HasColumnName("PageSize")
|
.HasColumnName("PageSize")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasDefaultValue 100
|
.HasDefaultValue 100
|
||||||
|
|> ignore
|
||||||
|
m.Property(fun e -> e.asOfDateDisplay)
|
||||||
|
.HasColumnName("AsOfDateDisplay")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(1)
|
||||||
|
.HasDefaultValue NoDisplay
|
||||||
|> ignore)
|
|> ignore)
|
||||||
|> ignore
|
|> ignore
|
||||||
|
mb.Model.FindEntityType(typeof<ListPreferences>).FindProperty("asOfDateDisplay")
|
||||||
|
.SetValueConverter(AsOfDateDisplayConverter ())
|
||||||
|
|
||||||
|
|
||||||
/// A member of a small group
|
/// A member of a small group
|
||||||
|
@ -38,6 +38,7 @@ type ListPreferencesTable =
|
|||||||
textFontSize : OperationBuilder<AddColumnOperation>
|
textFontSize : OperationBuilder<AddColumnOperation>
|
||||||
timeZoneId : OperationBuilder<AddColumnOperation>
|
timeZoneId : OperationBuilder<AddColumnOperation>
|
||||||
pageSize : OperationBuilder<AddColumnOperation>
|
pageSize : OperationBuilder<AddColumnOperation>
|
||||||
|
asOfDateDisplay : OperationBuilder<AddColumnOperation>
|
||||||
}
|
}
|
||||||
|
|
||||||
type MemberTable =
|
type MemberTable =
|
||||||
@ -192,6 +193,7 @@ type InitialDatabase () =
|
|||||||
textFontSize = table.Column<int> (name = "TextFontSize", nullable = false, defaultValue = 12)
|
textFontSize = table.Column<int> (name = "TextFontSize", nullable = false, defaultValue = 12)
|
||||||
timeZoneId = table.Column<string> (name = "TimeZoneId", nullable = false, defaultValue = "America/Denver")
|
timeZoneId = table.Column<string> (name = "TimeZoneId", nullable = false, defaultValue = "America/Denver")
|
||||||
pageSize = table.Column<int> (name = "PageSize", nullable = false, defaultValue = 100)
|
pageSize = table.Column<int> (name = "PageSize", nullable = false, defaultValue = 100)
|
||||||
|
asOfDateDisplay = table.Column<string> (name = "AsOfDateDisplay", nullable = false, defaultValue = "N", maxLength = Nullable<int> 1)
|
||||||
}),
|
}),
|
||||||
constraints =
|
constraints =
|
||||||
fun table ->
|
fun table ->
|
||||||
@ -359,9 +361,11 @@ type InitialDatabase () =
|
|||||||
b.Property<string>("lineColor").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("navy") |> ignore
|
b.Property<string>("lineColor").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("navy") |> ignore
|
||||||
b.Property<string>("listFonts").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("Century Gothic,Tahoma,Luxi Sans,sans-serif") |> ignore
|
b.Property<string>("listFonts").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("Century Gothic,Tahoma,Luxi Sans,sans-serif") |> ignore
|
||||||
b.Property<int>("longTermUpdateWeeks").ValueGeneratedOnAdd().HasDefaultValue(4) |> ignore
|
b.Property<int>("longTermUpdateWeeks").ValueGeneratedOnAdd().HasDefaultValue(4) |> ignore
|
||||||
b.Property<string>("requestSort").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("D").HasMaxLength(1) |> ignore
|
b.Property<string>("requestSort").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("D").HasMaxLength(1) |> ignore
|
||||||
b.Property<int>("textFontSize").ValueGeneratedOnAdd().HasDefaultValue(12) |> ignore
|
b.Property<int>("textFontSize").ValueGeneratedOnAdd().HasDefaultValue(12) |> ignore
|
||||||
b.Property<string>("timeZoneId").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("America/Denver") |> ignore
|
b.Property<string>("timeZoneId").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("America/Denver") |> ignore
|
||||||
|
b.Property<int>("pageSize").IsRequired().ValueGeneratedOnAdd().HasDefaultValue(100) |> ignore
|
||||||
|
b.Property<string>("asOfDateDisplay").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("N").HasMaxLength(1) |> ignore
|
||||||
b.HasKey("smallGroupId") |> ignore
|
b.HasKey("smallGroupId") |> ignore
|
||||||
b.HasIndex("timeZoneId") |> ignore
|
b.HasIndex("timeZoneId") |> ignore
|
||||||
b.ToTable("ListPreference") |> ignore)
|
b.ToTable("ListPreference") |> ignore)
|
||||||
|
@ -46,10 +46,11 @@ type AppDbContextModelSnapshot () =
|
|||||||
b.Property<string>("lineColor").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("navy") |> ignore
|
b.Property<string>("lineColor").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("navy") |> ignore
|
||||||
b.Property<string>("listFonts").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("Century Gothic,Tahoma,Luxi Sans,sans-serif") |> ignore
|
b.Property<string>("listFonts").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("Century Gothic,Tahoma,Luxi Sans,sans-serif") |> ignore
|
||||||
b.Property<int>("longTermUpdateWeeks").ValueGeneratedOnAdd().HasDefaultValue(4) |> ignore
|
b.Property<int>("longTermUpdateWeeks").ValueGeneratedOnAdd().HasDefaultValue(4) |> ignore
|
||||||
b.Property<string>("requestSort").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("D").HasMaxLength(1) |> ignore
|
b.Property<string>("requestSort").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("D").HasMaxLength(1) |> ignore
|
||||||
b.Property<int>("textFontSize").ValueGeneratedOnAdd().HasDefaultValue(12) |> ignore
|
b.Property<int>("textFontSize").ValueGeneratedOnAdd().HasDefaultValue(12) |> ignore
|
||||||
b.Property<string>("timeZoneId").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("America/Denver") |> ignore
|
b.Property<string>("timeZoneId").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("America/Denver") |> ignore
|
||||||
b.Property<int>("pageSize").IsRequired().ValueGeneratedOnAdd().HasDefaultValue(100) |> ignore
|
b.Property<int>("pageSize").IsRequired().ValueGeneratedOnAdd().HasDefaultValue(100) |> ignore
|
||||||
|
b.Property<string>("asOfDateDisplay").IsRequired().ValueGeneratedOnAdd().HasDefaultValue("N").HasMaxLength(1) |> ignore
|
||||||
b.HasKey("smallGroupId") |> ignore
|
b.HasKey("smallGroupId") |> ignore
|
||||||
b.HasIndex("timeZoneId") |> ignore
|
b.HasIndex("timeZoneId") |> ignore
|
||||||
b.ToTable("ListPreference") |> ignore)
|
b.ToTable("ListPreference") |> ignore)
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<AssemblyVersion>7.0.0.0</AssemblyVersion>
|
<AssemblyVersion>7.3.0.0</AssemblyVersion>
|
||||||
<FileVersion>7.0.0.0</FileVersion>
|
<FileVersion>7.3.0.0</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -45,6 +45,7 @@ let listPreferencesTests =
|
|||||||
Expect.equal mt.timeZoneId "America/Denver" "The default time zone should have been America/Denver"
|
Expect.equal mt.timeZoneId "America/Denver" "The default time zone should have been America/Denver"
|
||||||
Expect.equal mt.timeZone.timeZoneId "" "The default preferences should have included an empty time zone"
|
Expect.equal mt.timeZone.timeZoneId "" "The default preferences should have included an empty time zone"
|
||||||
Expect.equal mt.pageSize 100 "The default page size should have been 100"
|
Expect.equal mt.pageSize 100 "The default page size should have been 100"
|
||||||
|
Expect.equal mt.asOfDateDisplay NoDisplay "The as-of date display should have been No Display"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>netcoreapp2.2</TargetFramework>
|
<TargetFramework>netcoreapp2.2</TargetFramework>
|
||||||
|
<AssemblyVersion>7.3.0.0</AssemblyVersion>
|
||||||
|
<FileVersion>7.3.0.0</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<AssemblyVersion>7.0.0.0</AssemblyVersion>
|
<AssemblyVersion>7.3.0.0</AssemblyVersion>
|
||||||
<FileVersion>7.0.0.0</FileVersion>
|
<FileVersion>7.0.0.0</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp2.2</TargetFramework>
|
<TargetFramework>netcoreapp2.2</TargetFramework>
|
||||||
<AssemblyVersion>7.2.0.0</AssemblyVersion>
|
<AssemblyVersion>7.3.0.0</AssemblyVersion>
|
||||||
<FileVersion>7.0.0.0</FileVersion>
|
<FileVersion>7.3.0.0</FileVersion>
|
||||||
<Authors></Authors>
|
<Authors></Authors>
|
||||||
<Company>Bit Badger Solutions</Company>
|
<Company>Bit Badger Solutions</Company>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -3,3 +3,4 @@ set search_path=pt,public;
|
|||||||
create index "IX_PrayerRequest_Requestor_TRGM" on "PrayerRequest" using GIN (COALESCE("Requestor", '') gin_trgm_ops);
|
create index "IX_PrayerRequest_Requestor_TRGM" on "PrayerRequest" using GIN (COALESCE("Requestor", '') gin_trgm_ops);
|
||||||
create index "IX_PrayerRequest_Text_TRGM" on "PrayerRequest" using GIN ("Text" gin_trgm_ops);
|
create index "IX_PrayerRequest_Text_TRGM" on "PrayerRequest" using GIN ("Text" gin_trgm_ops);
|
||||||
alter table "ListPreference" add column "PageSize" int not null default 100;
|
alter table "ListPreference" add column "PageSize" int not null default 100;
|
||||||
|
alter table "ListPreference" add column "AsOfDateDisplay" varchar(1) not null default 'N';
|
||||||
|
Loading…
Reference in New Issue
Block a user