feat: markets page recommended tab and Portals assets

Description
This PR brings in the recommended tab of markets page, alongside Portals tokens fetching.
TODO:

[x] Bootstrap
[x] Desycnronize chain selection
[x] Lazily fetch market-data
[x] Portals react-query and programmatic
[x] upsert portals assets
[x] Route to asset page on click
[x] Most popular first-child card
[x] skeletaroos
[x] Copies
[x] Cleanup
[x] @NeOMakinG oil
[x] Consume inner portals query in existing web consumptions

Follow-up:

[ ] Beard-oil disregard this, this was @NeOMakinG oil, he may not have a beard, but the oil is of the highest quality too
[ ] cg data (may or may not be react-query)
[ ] upsert cg assets?

Issue (if applicable)

tackles https://github.com/shapeshift/web/issues/7623

Risk

High Risk PRs Require 2 approvals

What protocols, transaction types, wallets or contract interactions might be affected by this PR?

Low
Testing

Markets Page's recommended tab Portals row is happy
Markets Page's recommended tab  Recommended looks good visually
Markets Page's recommended tab Volume is present for all assets (or N/A)
Markets Page's recommended tab Market-data is present for all assets
Loading state is implemented (note, we currently leverage Portals loading state, so all including current placeholders will be loading as a result of Portals loading)
The fetched assets are upserted in the asses slice (meaning you can search them with global search and access their page, and use in swapper. Pick any asset from the Portals row and ensure you can do so. )
Chain selection is happy and narrows selection per chain

Engineering

☝🏽

Operations

[x] :checkered_flag: My feature is behind a flag and doesn't require operations testing (yet)

☝🏽

Screenshots (if applicable)

Opening for early review - still some cleanup to do here and oil to be bearded, this looks jank visually atm

❓ Markets page icon same as pools page

Replaced with the same as the Assets page to match the spec - 7dfee08d9a :

❓ Chain selection affects other rows

Decoupled selection per row in 78d258f11a, nice catch!

❌ Empty chain entry in drop-down leading to empty page

Filtered out Arb nova in 8f835320e8

Also on a tengent re: two last line items, added a notion of supported ChainIds in 81f9492e0a as well as a narrowing of Portals assets at queryparams time- this will

ensure rows don't allow selecting unsupported chains
Portals assets (and the next ones, as we fetch them) fire a query that has the selected ChainId (or all) as queryparam, which will ensure we have a full row of results - using the 250 max pageLimit, we may have gotten some results across all chains, but not guaranteed, and also not guaranteed to fill the row.

https://jam.dev/c/c12a7fed-6b13-4611-8806-2c061bd230b9


NPE During startup 1.1.0.RELEASE

2017-04-13 18:24:10.971+0200 | ERROR |  | main | o.s.b.SpringApplication | Application startup failed
java.lang.NullPointerException: null
        at org.springframework.cloud.zookeeper.serviceregistry.ZookeeperServiceRegistry.register(ZookeeperServiceRegistry.java:82)
        at org.springframework.cloud.zookeeper.serviceregistry.ZookeeperServiceRegistry.register(ZookeeperServiceRegistry.java:43)
        at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.registerManagement(AbstractAutoServiceRegistration.java:44)
        at org.springframework.cloud.client.discovery.AbstractDiscoveryLifecycle.start(AbstractDiscoveryLifecycle.java:114)
        at org.springframework.cloud.client.discovery.AbstractDiscoveryLifecycle.onApplicationEvent(AbstractDiscoveryLifecycle.java:243)
        at org.springframework.cloud.client.discovery.AbstractDiscoveryLifecycle.onApplicationEvent(AbstractDiscoveryLifecycle.java:42)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:383)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:337)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:147)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:545)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)

From a simple zookeeper discovery enabled app created from http://start.spring.io I am unable to recreate your issue. Can you please share more than just a stack trace? If possible, a project that recreates the problem?

I'll investigate more next week.

You need to have management enabled.
ZookeeperAutoServiceRegistration:
	protected ZookeeperRegistration getManagementRegistration() {
		return null;
	}

ZookeeperServiceRegistry:
	public void register(ZookeeperRegistration registration) {
		try {
			getServiceDiscovery().registerService(registration.getServiceInstance());
		} catch (Exception e) {
			rethrowRuntimeException(e);
		}
	}

Thanks, that's what I was missing.

Is there a work around for this in 1.1.0?  Or is this release hosed at the moment?

Work around is to disable management:
management.port: -1

You could also extend ZookeeperServiceRegistry and register it as a bean named zookeeperServiceRegistry and add a null check.

Hmm, but I'm already setting the management port on all of our services. We've always been running it on another port. Is there something special about -1, or is it just looking for a value? Even with a value (not -1), we still get an NPE.

-1 is disabling management not randomizing it's port


[prompt] eriner: Add help, preview, parameters

and refactor code, inlining auxiliary functions inside prompt_eriner_main.
Theme colors are now customizable with parameters. Also, it works better with light backgrounds by using %Sstandout%s for the segments which were originally using black as foreground color (intended for dark backgrounds).
The help explains the parameters, and the preview shows one color variation.

This is how it looks like with Solarized Dark and Solarized Light profiles:

Oh, and this fixes #169

Bah, I reviewed this a few days ago but I guess I forgot to comment. LGTM!


Fix typo in production planning

LGTM
We also need to run publish site. But I'll be revising this page next. I'll run it once my changes are done.

@sougou Any updates on DNS migration to Netlify? That would eliminate the need for publish site


Refactor/state machine

This PR refactors the main log to use a basic finite state machine based on std::variant
Major changes:

Moves main logic into GameLogic class
Adds States.hpp that handles state transitions

This should have additional tests to make sure state transitions work correctly


Issues with plans based on multi-phase templates

Please complete the following fields as applicable:
Expected behaviour:

Exporting a public multi-phase plan exports all phases
User is able to set the visibility to public after they have completed the 1st phase of a multi-phase plan.

Actual behaviour:

Exporting a public multi-phase plan only exports the first phase (from the public plans page)
Right now the logic only enables the user to change visibilities when 50% of the entire plan (all phases) its complete.

Steps to reproduce:

Search for a Horizon2020 plan on the public plans page and export it.
Create a new Horizon2020 plan and answer 50% of the questions on the 1st phase. Then go to the share tab and try to change the visibility

Recommendation is to leave visibility logic as-is and update export logic to have all phases.


CustomPaint size

Done. Also a test of child with a size itself. Also fixed the name of the test.
Will land after Travis goes green.


ucfirst seems to not do its part

This is so weird, I've verified $command to be a String and also tested ucfirst with a static string and it works. But when ucfirst is used with $command ( ucfirst($command) ), it isn't returning as it should. Please refer to the screenshot. I will try and fix this in my end.

fixed the issue by removing the double quote since it's a json string
ucfirst(trim($command, '"'))

kindly update the

Proposed fix https://github.com/consik/yii2-websocket/pull/11


Defining no maxDate defaults to the end of the next year

Context:

Browser [All]
Browser-version [All]
Schedule-X version [All]

Describe the bug
A max date is being set in packages/date-picker/src/utils/stateful/config/config.impl.ts for the date picker. This leads to you being unable to scroll past this date with the back and forward buttons.
To Reproduce
Steps to reproduce the behaviour:

Go to the hosted example
Click on the forward chevron button until you get to December 2025
You will not be able to scroll past December

Expected behaviour
I don't know if this is expected, but the docs need to be adjusted if it is.
Screenshots

This is a regression.
When I started building the project, there was no max date feature, but I didn't want to render more years than 1 year ahead in the date picker year view by default. Then I added a maxDate feature, and seems like I accidentally used the same default date for that, as for the years rendered in the year view.
Thanks for reporting!

@tomosterlund, which way do you want to go with the fix? I would be prepared to PR; I need to know if you want to update the docs or remove the default and then I will start 😄

decided on a slightly different approach:

keep min- and max dates in date picker, but increase default to current year + 50.
in v3 introduce breaking change in calendar, where calendar + date picker share a common min- max date per default

awesome thanks so much @tomosterlund


compare many videos in a database

does someone have the code to compare many videos in a database and delete from the file system one or more that already have a similar hash in the database? Please post it.

You may want to take a look at this web app I built:
https://github.com/Demmenie/Aethra
The main branch has a complex version for MongoDB but there's a simpler SQL version in the 'ver_0.5' Branch called "dbAccess.py"

thanks, could it be used with mysql?

I am using postgreSQL unfortunately, it might be worth trying to incorporate something like this into the module but I'm not sure how that would work well. Are you trying to do this locally? I happen to be using a GCP hosted solution.


fix: drop @semantic-release/github as a direct dependency

While we do depend on @semantic-release/github, it's a dependency of semantic-release, which just upgraded the former from 2 to 3. Having to keep up with that seems silly when we can implicitly depend on it through the semantic-release dependency.

Merging this PR will publish the following release:

1.1.5 (2017-12-24)
Bug Fixes

drop [@semantic-release](https://github.com/semantic-release)/github as a direct dependency (129e421)

Merging this PR will publish the following release:

1.1.5 (2017-12-24)
Bug Fixes

drop [@semantic-release](https://github.com/semantic-release)/github as a direct dependency (129e421)


Js.bin not working

Hi, Is everyone encountering this issue with Js.bin, where they are stuck at the loading screen and if they click on a new bin, there is no option to upload folders to create a cdn link?

I experience it too.
It might work if you are logged in.

Hi Remy, its working now. Thank you!


BUG: RenderCardToImageAsync() clips background on both right and bottom - fill broken (1.0)

BUG: RenderCardToImageAsync() clips background on both right and bottom - fill broken (1.0)
Background:
I'm using AdaptiveCards to create rich og:images so that the preview for my site looks nice in Skype, Facebook, etc.
THIS ALL WORKED IN THE 0.5 BUILD
Repro #1:

Create a card that has a background exactly the same size as the generated card -- for example:  qpongo.com/ogimages/HomeUS.json  Note that I'm running a host config with values from the 0.5 build so that I didn't have to redo my math for making everything line up and space appropriately.
Use the following code to generate the image

               AdaptiveCardRenderer renderer = new AdaptiveCardRenderer(new AdaptiveHostConfig());
                var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));

                // Render the card to an image
                RenderedAdaptiveCardImage renderedCard = await renderer.RenderCardToImageAsync(card, true, 600, cts.Token);

                using (FileStream fs = new FileStream(strFName, FileMode.Create))
                {
                    await renderedCard.ImageStream.CopyToAsync(fs);
                    await fs.FlushAsync();
                }

Expected#1:

Expected to fit width or fit height -- BOTH in this case because the background is exactly the same size as the card.
Actual#1:

Notice that it clipped both the right and the bottom.

Repro #2:

Build the AdaptiveCard project (C#) and run AdaptiveCards.Sample.WPFVisualizer with some JSON that has a background -- for example:  qpongo.com/ogimages/HomeUS.json but change "localhost:83" to "qpongo.com"
Modify the code to create an image of 600 pixels wide...
From \AdaptiveCards\source\dotnet\Samples\WPFVisualizer\MainWindow.xaml.cs - line 253

        private async void viewImage_Click(object sender, RoutedEventArgs e)
        {
            //Disable interactivity to remove inputs and actions from the image
            var supportsInteractivity = Renderer.HostConfig.SupportsInteractivity;
            Renderer.HostConfig.SupportsInteractivity = false;

            var renderedCard = await Renderer.RenderCardToImageAsync(AdaptiveCard.FromJson(textBox.Text).Card, false, 600);

_Notice that I added 600 as a parameter to RenderCardToImageAsync() _
3. Run and click to generate an image
Expected#2:
Image should be the same as Expected#1
Actual#2:
Same problems as with Actual#1

FIX Research:
See notes from ** \AdaptiveCards\source\dotnet\Library\AdaptiveCards.Rendering.Wpf\Helpers\ImageExtensions.cs **
        public static async void SetBackgroundSource(this Grid grid, Uri url, AdaptiveRenderContext context)
        {
            if (url == null)
                return;

            grid.Background = new ImageBrush(await context.ResolveImageSource(url))
            {
                Stretch = Stretch.UniformToFill,            // DOESN'T WORK in my case
                //Stretch = Stretch.None,                   // WORKS.
                //Stretch = Stretch.Uniform,                // WORKS.
                //Stretch = Stretch.Fill,                   // FITS WIDTH BUT CLIP BOTTOM OF BACKGROUND -- works fine if line 24 hack is removed
                AlignmentX = AlignmentX.Left,
                AlignmentY = AlignmentY.Top
            };
        }

Stretch.UniformToFill is the current value set there in SetBackgroundSource() but it doesn't work in any of my test cases to generate images.

Stretch.None and Stretch.Uniform work for me (in my case) because my background is exactly the right size.

Stretch.Fill causes a new problem because of the hack on line 24 to add 100 pixels so that other calculations work.  In this case it fits the width but clips the bottom.

Line 24 hack
       public static MemoryStream RenderToImage(this FrameworkElement element, int width)
        {
            element.Measure(new Size(width, int.MaxValue));
            // Add 100 to the height to give it some buffer. This addressed some bugs with maxlines getting clipped
            element.Arrange(new Rect(new Size(width, element.DesiredSize.Height + 100)));
            //element.Arrange(new Rect(new Size(width, element.DesiredSize.Height)));
            element.UpdateLayout();

with the +100 hack --  (without this hack it looks fine)

BTW, lots of love for clean hacks.  ;)
IMPORTANT:  the visual preview in the WPFVisualizer is different from the generated image
Things mostly look OK in the visualizer -- the problem is with the rendered image.

And, finally, I thought that this was such a cool use of AdaptiveCards that I wrote a very detailed how to article for Code Project.  It was marked as SPAM 5 times in 30 minutes and my Code Project account (of 10 years) was deleted.  YIKES!
I will remove all references to my company or you can delete this bug report if you feel that I mentioned my project name for some nefarious purposes -- I did not.
But please fix the bug -- for now I'll make my own custom build.
THANKS in advance.

Thank you for the very detailed report! I'm a little confused on the research section though: is the fix you propose working for all cases or just for the cards you are generating? And if you've got a fix and are willing to open a PR that would help speed things up as well :)

Hey Matt.
No, I would definitely say that my fix is not safe for all cases -- I can live with Stretch.Uniform but I think that the commonly desired behavior would be to work like you had in 0.5 and that was to fit width or fit height so that there's no unfilled space.
I just pointed out what happens when testing all the parameters with my case for someone that understood the image render better.
Using Stretch.Uniform [my fix] with http://adaptivecards.io/samples/WeatherLarge.html
Does appear work for the 400 pixel wide image generation when you don't look too closely...

But shows incorrectly in the preview.

You might not notice any issues with the sample because there's no clear lines on the page so Stretch.UniformToFill [currently checked in] might also appear to work unless you look closely...

Stretch.None and Stretch.Uniform work in my case because I'm generating an image of the exact size as my background so doing nothing with the background scaling is just fine.
Yes, I wanted to propose a fix but I never figured out why the rendering is different for the preview and the generate png code.
## One proposal might be to expose a property for the background stretch mode so that the user has a little more control to get what they want.
BUT....  I think there's still a bug with Stretch.Uniform.

The current .NET renderer is behind the mainline and needs updating; adding proper labels and moving to get this on the roadmap


Update node-ci-push.yml

Codecov Report

Merging #150 (a986e72) into main (8e581c4) will increase coverage by 33.97%.
The diff coverage is n/a.

@@             Coverage Diff             @@
##             main     #150       +/-   ##
===========================================
+ Coverage   41.17%   75.15%   +33.97%
===========================================
  Files          65       17       -48
  Lines        2460      801     -1659
  Branches      666      162      -504
===========================================
- Hits         1013      602      -411
+ Misses       1251      175     -1076
+ Partials      196       24      -172

Flag
Coverage Δ

backend
75.15% <ø> (ø)

frontend
?

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

frontend/src/components/FormEditor/FormList.js

frontend/src/components/Filter/Filterform.js

frontend/src/components/Custom/LumaEventWrapper.js

frontend/src/components/VisitPage.js

frontend/src/components/ModifyEventModal/index.js

frontend/src/components/Toast.js

frontend/src/components/Filter/CalendarFilter.js

...ontend/src/components/LumaTagInput/LumaTagInput.js

frontend/src/components/FormEditor/FieldItem.js

frontend/src/components/CountDown.js

... and 38 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 48d6895...a986e72. Read the comment docs.


Add additional option to allow setting custom http headers.

This can e.g. be used to set CSRF tokens or authentication headers.

Nice addition, thank you! :)


It is detected now as malware by Windows Defender and 3 of virustotal

https://www.virustotal.com/gui/url/706efd6c741e4562c633433974e2902950b82b2be2c2d794a0acdd10250ef7d1/detection

You can resolve this by changing the name of the function:
just edit the file and replace the header
function powercat
with
function powercatt

It won't if you turn off windows defender, then use the link and then turn it back on.

Sorry, but the intent of this tool is to not be a defensive evasion system... that said, there are features which help avoid detection.
Future versions will have this more explicitly spelled out.

Closing this issue. There are methods Powercat has which allows evasion. You can also leverage several different encoding methods and tools to bypass detection. Please consider using them.


Docs are contradictory as to which classes should be used and when and how (in what combinations, etc) for stacked and inlined checkboxes/radios markup

I asked this question in https://github.com/twbs/bootstrap/issues/20403#issuecomment-241100345 but am making it its own issue for more visibility.
The chart at the bottom of the http://v4-alpha.getbootstrap.com/components/forms/#form-controls section lists these classes as being applicable to radio and checkbox controls:

.radio
.radio-inline
.checkbox
.checkbox-inline

The only such example though I see of these classes being used is in this code example within the same section:
  <div class="checkbox">
    <label>
      <input type="checkbox"> Check me out
    </label>
  </div>

The use of these classes seems to be contradicted (maybe?) in http://v4-alpha.getbootstrap.com/components/forms/#inline which uses a different set of classes for the inline or non-inline display of these controls.
Which classes should be used and when and how (in what combinations, etc)?

Fixed by #20629.


DIC Color Guide - Chinese Traditional Colors

Hi,
recently I've used your project to port the list of Chinese Traditional Colors to different versions of Mac OS X and Adobe Creative applications. It took me many hours to type all these colors (from the data provided by DIC Digital Color Guide (iOS version), but I can't find a suitable place to publish it. Maybe you it's better to put it here, inside the "examples" folder of your project.
Regards,
Chun Tian

@binghe I just realized that DIC is copyrighted by DIC corporation in Japan.
I'd rather not add that content, as it could result in DMCA takedowns of the repo.
I'll be removing the other DIC and sample files from the repo.
Sorry about that!

OK, no problem. Anyway, I was creating these files for my personal uses.


Chart for deceased cases by age added

Description of PR
Add a bar graph which shows the information of deceased cases by age and also by male & female numbers.
Checklist

[x] Compiles and passes lint tests
[x] Properly formatted
[x] Tested on desktop
[x] Tested on phone

Screenshots
Add relevant screenshots here

Seems like this PR is obsolete now since deep-dive was deprecated. Closing


App crashes when a TabbedPage has a BindingContext set and at least one child page inherits from ViewBase

An app that makes use of TinyMvvm crashes under the following circumstances:

There is a TabbePage which has its BindingContext set to, say, an instance of a class called TabbedViewModel;
At least one of the children pages of the TabbedPage inherits from ViewBase<T>, where T is the type of the ViewModel the child page is supposed to use, say a class called ChildViewModel

In this conditions, TinyMvvm is supposed to create the ViewModel for the child page during its OnAppearing method, and the first lines of code in that method are:
if(ViewModel == null && !CreatedByTinyMvvm)
{
    CreateViewModel();
}

Property ViewModel, on its side, contains these lines of code:
if (BindingContext != null)
{
    return (T)BindingContext;
}

return default(T);

This code assumes that if a BindingContext is already set, it is of type T, which is wrong in the case of a child page of a TabbedPage because, until it set its own ViewModel, it inherits the ViewModel of the TabbedPage itself so, in our case, BindingContext is here of type TabbedViewModel and not ChildViewModel, which makes the app crash.
I think the line
return (T) BindingContext;
should be changed in
return T As BindingContext;
In this way, if the BindingContext is inherited from a parent and thus not of type T, null is returned and a BindingContext of the correct type is then created in the lines that follow in the OnAppearing method.

Are you using IoC?

Yes I'm using Autofac, but I think it would be the same, the crash occurs before creating the viewmodel of the child page, when evaluating if the BindingContext has already been set. The problem is, the BC is inherited from the parent TabbedPage before creating it, so it is not of the expected type.

Can you show me the code for your TabbedPage?

It is just the TabbedPage created by Xamarin Forms template in VS 2017, slightly accommodated to test some TinyMvvm features.
Here is the xaml:
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:views="clr-namespace:TinyMvvmApp.Views"
            x:Class="TinyMvvmApp.Views.MainPage"
            NavigationPage.HasNavigationBar="False"
            >
    <TabbedPage.Children>
        <NavigationPage Title="Browse">
            <NavigationPage.Icon>
                <OnPlatform x:TypeArguments="FileImageSource">
                    <On Platform="iOS" Value="tab_feed.png"/>
                </OnPlatform>
            </NavigationPage.Icon>
            <x:Arguments>
                <views:ItemsPage />
            </x:Arguments>
        </NavigationPage>

        <NavigationPage Title="About">
            <NavigationPage.Icon>
                <OnPlatform x:TypeArguments="FileImageSource">
                    <On Platform="iOS" Value="tab_about.png"/>
                </OnPlatform>
            </NavigationPage.Icon>
            <x:Arguments>
                <views:AboutPage />
            </x:Arguments>
        </NavigationPage>
    </TabbedPage.Children>
    <TabbedPage.ToolbarItems>
        <ToolbarItem Text="{Binding NavigationButtonText}" Command="{Binding NavigateTo}" CommandParameter="ItemDetailPage"></ToolbarItem>
    </TabbedPage.ToolbarItems>
</TabbedPage>

... and here the code behind:
namespace TinyMvvmApp.Views
{
	[XamlCompilation(XamlCompilationOptions.Compile)]
	public partial class MainPage : TabbedPage
	{
            public MainPage()
            {
                InitializeComponent();
            }

	    protected override void OnAppearing()
	    {
                if (BindingContext == null)
                {
                    BindingContext = new MainViewModel();
                }
	        base.OnAppearing();
	    }
	}
}

It's not so easy to just change to BindingContext as T. The reason is that the compiler does not allow it. But I looking for a solution.

I you have a solution, please submit a pull request :)

Hello Daniel, you are right. The compiler does not allow to do that, because T has no "class" clause. To make it works, you should change the signature of ViewBase<T> class into:
public abstract class ViewBase<T> : ViewBase where T : class, INotifyPropertyChanged
Of course this would make it impossible to use a ViewModel that is not a class (that is, a struct).
I think it'is highly probably that users of TinyMvvm use ViewModelBase as their BindingContext or at least a class, so there should be no great problem in adding this clause.
But of course that could be a very breaking change if someone for some reason had used a struct as a ViewModel.
At least, it would be a compile-time break, not a runtime one, because one should no more be able to declare a Page as inheriting from ViewBase<T> when T is not a class.
Of course the decision is up to you... :)
As a workaround, I've come to manually create the ViewModel in the OnAppearing override of the child Page:
var vm = Resolver.Resolve<ItemsViewModel>();
BindingContext = vm;
base.OnAppearing();

This way, when the OnAppearing of ViewBase is executed, it finds the ViewModel already set and with the right type.

Fixed in https://github.com/TinyStuff/TinyMvvm/commit/e785a9d77389edc087a88403010d8a03b4568253