Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for ViewElement in ListView/ListViewGrouped #408

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/Fabulous.Core/ViewConverters.fs
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,15 @@ module Converters =
| :? TemplatedPage as p -> ShellContent.op_Implicit p
| _ -> failwithf "makeTemplate: invalid argument %O" v

/// Converts a ViewElement to a View, or other types to string
let makeViewOrString (v: obj) : obj =
match v with
| null -> null
| :? View as view -> view :> obj
| :? ViewElement as viewElement -> viewElement.Create()
| :? string as str -> str :> obj
| _ -> v.ToString() :> obj

/// Checks whether two objects are reference-equal
let identical (x: 'T) (y:'T) = System.Object.ReferenceEquals(x, y)

Expand Down Expand Up @@ -450,6 +459,7 @@ module Converters =
oc
updateCollectionGeneric (ValueOption.map seqToArray prevCollOpt) (ValueOption.map seqToArray collOpt) targetColl ListElementData (fun _ _ _ -> ()) canReuseChild (fun _ curr target -> target.Key <- curr)

/// Update the items in a CollectionView control, given previous and current view elements
let internal updateCollectionViewItems (prevCollOpt: seq<'T> voption) (collOpt: seq<'T> voption) (target: Xamarin.Forms.CollectionView) =
let targetColl =
match target.ItemsSource with
Expand All @@ -460,6 +470,7 @@ module Converters =
oc
updateCollectionGeneric (ValueOption.map seqToArray prevCollOpt) (ValueOption.map seqToArray collOpt) targetColl ItemListElementData (fun _ _ _ -> ()) canReuseChild (fun _ curr target -> target.Key <- curr)

/// Update the items in a CarouselView control, given previous and current view elements
let internal updateCarouselViewItems (prevCollOpt: seq<'T> voption) (collOpt: seq<'T> voption) (target: Xamarin.Forms.CarouselView) =
let targetColl =
match target.ItemsSource with
Expand Down Expand Up @@ -756,6 +767,7 @@ module Converters =
| _, ValueNone -> Xamarin.Forms.MenuItem.SetAccelerator(target, null)
| _, ValueSome newVal -> Xamarin.Forms.MenuItem.SetAccelerator(target, makeAccelerator newVal)

/// Update the items of a Shell, given previous and current view elements
let internal updateShellItems (prevCollOpt: seq<'T> voption) (collOpt: seq<'T> voption) (target: Xamarin.Forms.Shell) =
let create (desc: ViewElement) =
desc.Create() :?> Xamarin.Forms.ShellItem
Expand All @@ -764,6 +776,7 @@ module Converters =
let currArray = ValueOption.map seqToArray collOpt
updateCollectionGeneric prevArray currArray target.Items create (fun _ _ _ -> ()) (fun _ _ -> true) updateChild

/// Update the menu items of a Shell, given previous and current view elements
let internal updateMenuItemsShell (prevCollOpt: seq<'T> voption) (collOpt: seq<'T> voption) (target: Xamarin.Forms.Shell) =
let create (desc: ViewElement) =
desc.Create() :?> Xamarin.Forms.MenuItem
Expand All @@ -772,6 +785,7 @@ module Converters =
let currArray = ValueOption.map seqToArray collOpt
updateCollectionGeneric prevArray currArray target.MenuItems create (fun _ _ _ -> ()) (fun _ _ -> true) updateChild

/// Update the menu items of a ShellContent, given previous and current view elements
let internal updateMenuItemsShellContent (prevCollOpt: seq<'T> voption) (collOpt: seq<'T> voption) (target: Xamarin.Forms.ShellContent) =
let create (desc: ViewElement) =
desc.Create() :?> Xamarin.Forms.MenuItem
Expand All @@ -780,6 +794,7 @@ module Converters =
let currArray = ValueOption.map seqToArray collOpt
updateCollectionGeneric prevArray currArray target.MenuItems create (fun _ _ _ -> ()) (fun _ _ -> true) updateChild

/// Update the items of a ShellItem, given previous and current view elements
let internal updateShellItemItems (prevCollOpt: seq<'T> voption) (collOpt: seq<'T> voption) (target: Xamarin.Forms.ShellItem) =
let create (desc: ViewElement) =
desc.Create() :?> Xamarin.Forms.ShellSection
Expand All @@ -788,6 +803,7 @@ module Converters =
let currArray = ValueOption.map seqToArray collOpt
updateCollectionGeneric prevArray currArray target.Items create (fun _ _ _ -> ()) (fun _ _ -> true) updateChild

/// Update the items of a ShellSection, given previous and current view elements
let internal updateShellSectionItems (prevCollOpt: seq<'T> voption) (collOpt: seq<'T> voption) (target: Xamarin.Forms.ShellSection) =
let create (desc: ViewElement) =
desc.Create() :?> Xamarin.Forms.ShellContent
Expand Down
16 changes: 12 additions & 4 deletions tools/Generator/Xamarin.Forms.Core.json
Original file line number Diff line number Diff line change
Expand Up @@ -1842,15 +1842,19 @@
},
{
"name": "Footer",
"defaultValue": "null"
"defaultValue": "null",
"inputType": "obj",
"convToModel": "makeViewOrString"
},
{
"name": "HasUnevenRows",
"defaultValue": "false"
},
{
"name": "Header",
"defaultValue": "null"
"defaultValue": "null",
"inputType": "obj",
"convToModel": "makeViewOrString"
},
{
"name": "HeaderTemplate",
Expand Down Expand Up @@ -1972,15 +1976,19 @@
},
{
"name": "Footer",
"defaultValue": "null"
"defaultValue": "null",
"inputType": "obj",
"convToModel": "makeViewOrString"
},
{
"name": "HasUnevenRows",
"defaultValue": "false"
},
{
"name": "Header",
"defaultValue": "null"
"defaultValue": "null",
"inputType": "obj",
"convToModel": "makeViewOrString"
},
{
"name": "IsPullToRefreshEnabled",
Expand Down