adospace / reactorui-maui

MauiReactor is a MVU UI framework built on top of .NET MAUI
MIT License
605 stars 50 forks source link

Roadmap & stable release #14

Open rctec-at opened 1 year ago

rctec-at commented 1 year ago

Is there a official Roadmap and maybe a planed ETA for a stable release of this package?

adospace commented 1 year ago

Hi, sorry for the late reply, I'm planning to move the library from BETA to RELEASE stage before the end of this month (Jan-2023).

The library itself is already stable enough to be used in a production application, I'm planning to polish the code a bit removing old stuff not used anymore before releasing it.

To be honest, I hoped to have more feedback from adopters regarding problems or issues but I guess the user base is still small.

I think anyway it will gain some relevance as I officially declare it GA.

Thanks for your interest!

LITTOMA commented 1 year ago

amazing.

adospace commented 1 year ago

Happy to notify watchers of this ticket that MauiReactor is GA since version 1.0.105. I'm going to fix bugs and add new features without changing anything on the API surface so that the numerous provided samples will always build without errors.

Regarding documentation please take a look at the official MauiReactor doc site: https://adospace.gitbook.io/mauireactor/

I'll keep this ticket open for further collecting info about the release & doc that is surely helpful to others too.

johnkattenhorn commented 1 year ago

This looks really interesting @adospace - thanks for all the hard work so far! I watched the video - do you have a rough timescale on when the testing solution you mentioned in the video will be available to try out?

adospace commented 1 year ago

Thanks for your interest @johnkattenhorn, yes I was envisioning building a testing framework for MauiReactor and it's something to do in the coming months, I'll keep you updated on my progress on this thread. Said that, as you know, testing MAUI applications itself is not so straightforward because we'll end up building more integration tests than unit tests: the reason is that we need to actually create MAUI/Native controls under the hood.

On this note, I'm sure you know about the Spice framework https://github.com/jonathanpeppers/spice from @johnkattenhorn: that would be probably a game changer for MauiReactor because it's actually what my library really needs (i.e. a minimal framework to just build native controls tree without the overhead of the MVVM stack). That framework (if it will become real one day) will allow us to build real unit tests without dotnet MAUI dependencies. I've even built a MauiReactor prototype based on Spice (https://github.com/adospace/spice) that seems working pretty well.

So to sum up, I'm still on track to release a testing framework for MauiReactor in the coming months but thinking about the future I guess we still need better support for testing from MAUI itself.

adospace commented 1 year ago

@johnkattenhorn Please take a look at the branch https://github.com/adospace/reactorui-maui/tree/setup-testing-layer for an early peek: it contains a couple of unit tests.

johnkattenhorn commented 1 year ago

Thanks, @adospace I'm going to take a look in more detail over the weekend, we are pretty passionate about the possibilities of doing UI via code; you might know our technical director, who is also working in this space too (https://github.com/VincentH-Net/CSharpForMarkup#readme)

timahrentlov commented 1 year ago

I love the concept! Great work. And great samples.

Being so close to how flutter works, what are your thoughts about an AvaloniaUI 11 version?

adospace commented 1 year ago

Thanks @timahrentlov,

I follow Avalonia development closely, I make experiments with it since I discovered the project years ago. Besides the numerous great features, when I develop with it I still miss a lot of the MVU pattern and boost of productivity that comes with it from a real hot reload function.

Said that I always found that's beneficial for the community to have so many competing great alternatives to building UI in dotnet considering also Uno and Blazor.

timahrentlov commented 1 year ago

Thanks you for sharing your sentiments. It is much appreciated!

adospace commented 1 year ago

Wanted just to let you know that the latest version of MauiReactor fully supports component testing, Please check some sample tests here: https://github.com/adospace/reactorui-maui/tree/main/samples/UnitTests Also for the documentation, there is a new article: https://adospace.gitbook.io/mauireactor/components/testing

@johnkattenhorn

johnkattenhorn commented 1 year ago

Wanted just to let you know that the latest version of MauiReactor fully supports component testing, Please check some sample tests here: https://github.com/adospace/reactorui-maui/tree/main/samples/UnitTests Also for the documentation, there is a new article: https://adospace.gitbook.io/mauireactor/components/testing

@johnkattenhorn

adospace commented 1 year ago

Hi everyone, with latest PR, MauiReactor now supports also builtin dotnet maui hot-reload function (MetadataUpdateHandlerAttribute). A new documentation page is coming

stillnurs commented 1 year ago

Hi everyone, with latest PR, MauiReactor now supports also builtin dotnet maui hot-reload function (MetadataUpdateHandlerAttribute). A new documentation page is coming

Hi, thanks for your great work. Does this mean that we don't need to run Reactor.Maui.HotReload anymore?

adospace commented 1 year ago

@stillnurs no it's just another way to hot-reload the application. The custom MauiReactor hot-reload still supports much more code modifications compared to the built-in one. I guess that the dotnet built-in hot-reload will be more and more powerful in the future (see .NET 8+) Updated list of supported edits in dotnet: https://github.com/dotnet/roslyn/blob/main/docs/wiki/EnC-Supported-Edits.md

stillnurs commented 1 year ago

@adospace Is there any point to combine MauiReactor with C# Markup Extensions from Community Toolkit? I'm fairly new to .NET Maui, hope I'm asking a proper question.

saint4eva commented 1 year ago

@stillnurs They use different patterns. MauiReactor uses C# MVU app development pattern, while C# Markup Extension is heavily influenced by MVVM. So, they adhere to distinctive design patterns.

Otuyishime commented 1 year ago

@adospace I apologize I couldn't find anywhere else to ask you this question, but Is there a way to smoothly reverse animations with AnimationController? I've playing with it and it seems toggling IsEnabled resets controls to their original position. You can use this small component as an example. Appreciated.

class AnimatedBoxState
{
    public double Translate { get; set; } = 0.0;
    public bool ToggleAnimation { get; set; } = false;
}

class AnimatedBox : Component<AnimatedBoxState>
{
    public override VisualNode Render()
    {
        return new ContentPage("Animated Box")
        {
            new Grid()
            {
                new AnimationController
                {
                    new SequenceAnimation
                    {
                        new DoubleAnimation()
                            .StartValue(0)
                            .TargetValue(50)
                            .Duration(TimeSpan.FromMilliseconds(600))
                            .Easing(Easing.SinInOut)
                            .OnTick(v => SetState(s => s.Translate = v)),
                    }
                    .Loop(false)
                }
                .IsEnabled(State.ToggleAnimation)
                .OnIsEnabledChanged(enabled => SetState(s => s.ToggleAnimation = enabled)),
                new BoxView()
                    .GridRow(0)
                    .HCenter()
                    .VCenter()
                    .HeightRequest(80)
                    .WidthRequest(80)
                    .CornerRadius(10)
                    .TranslationX(State.Translate),
                new Button("Animate")
                    .GridRow(1)
                    .HCenter()
                    .VCenter()
                    .WidthRequest(150)
                    .OnClicked(Toggle)
            }
            .Rows(new MauiControls.RowDefinitionCollection
            {
                new MauiControls.RowDefinition(),
                new MauiControls.RowDefinition(GridLength.Auto)
            })
            .Padding(10)
            .BackgroundColor(Colors.LightSkyBlue)
        };
    }

    private void Toggle()
    {
        SetState(s => s.ToggleAnimation = !s.ToggleAnimation);
    }
}
adospace commented 1 year ago

@Otuyishime replied here: https://github.com/adospace/reactorui-maui/issues/59

adospace commented 1 year ago

Working on a new feature: it will be possible to use MauiReactor only for a portion of your XAML-based standard MVVM application using a new control called ComponentHost.

You'll be able to use MauiReactor in multiple locations or for a whole Page. Hot-reload will work too (of course only for MauiReactor components).

Everything seems to work well, so I will release it very soon, but if you want to experiment with it now, please pull the xaml-integration branch.

https://github.com/adospace/reactorui-maui/assets/10573253/f950f09f-0429-4d4f-80da-f140776f7b29

freever commented 1 year ago

What a fantastic idea!

saint4eva commented 1 year ago

Working on a new feature: it will be possible to use MauiReactor only for a portion of your XAML-based standard MVVM application using a new control called ComponentHost.

You'll be able to use MauiReactor in multiple locations or for a whole Page. Hot-reload will work too (of course only for MauiReactor components).

Everything seems to work well, so I will release it very soon, but if you want to experiment with it now, please pull the xaml-integration branch.

2023-05-23.17-35-23.mp4

That is a nice effort to encourage people to progressively migrate their app to Maui Reactor. But do not put so much effort on it as it might still encourage people to stick to MVVM and Xaml world.

The purpose of Maui Reactor is MVU and C#

acaliaro commented 1 year ago

@adospace ti dicono anche quello che devi o non devi fare, fantastico. Buon lavoro

saint4eva commented 1 year ago

Making effort to communicate in English is welcome. lol

iamnevir commented 1 year ago

i have problem how to get api for maui reactor, do you have any example of it?

adospace commented 1 year ago

@iamnevir sorry, not sure what you need, do you mean the documentation: https://adospace.gitbook.io/mauireactor/

iamnevir commented 1 year ago

have any sample app of mauireactor work with api? i need some to learn

adospace commented 1 year ago

I have a sample app that I'm crafting that interacts with a REST API including Signalr, but it is not yet ready, I'll let you know here about my progress. This is the sample app (not yet working): https://github.com/adospace/mauireactor-samples/tree/main/ChateoApp

iamnevir commented 1 year ago

how can i use slider in maui reactor to get value to state

adospace commented 1 year ago

@iamnevir please open a new issue for that, I use this thread only for announcements

adospace commented 1 year ago

Hi, MauiReactor is built on top of .NET Maui so generally speaking it supports any control that works with MAUI itself, so including DevExpress, SyncFusion, Grial, Telerik etc.

Said that, the integration can be sometimes tricky, especially for complex controls like CollectionViews, DataGrids etc. The Scaffold attribute tries to generate a general-purpose wrapper that usually works as is, but sometimes it requires further modifications and improvements.

Even if I personally think that in many cases using special libraries is not required to create even complex UIs I recognize that this can be a problem for MauiReactor adoption.

For this reason, I decided to create a repository devoted to containing and sharing wrappers for well-known libraries.

mauireactor-integration repo

The first wrapper I'm going to add is for DevExpress DxCollectionView along with a sample app.

Please create an issue on that repo if you find need advice on third-party control library integrations.

AswinPG commented 1 year ago

Working on a new feature: it will be possible to use MauiReactor only for a portion of your XAML-based standard MVVM application using a new control called ComponentHost.

You'll be able to use MauiReactor in multiple locations or for a whole Page. Hot-reload will work too (of course only for MauiReactor components).

Everything seems to work well, so I will release it very soon, but if you want to experiment with it now, please pull the xaml-integration branch.

2023-05-23.17-35-23.mp4

Hi @adospace Is there documentation for this feature. I would love to try it out. :)

adospace commented 1 year ago

The feature is still WIP and to be honest I'm not sure whether to publish it or not ( :) ). Anyway, if you want to check it out, please download this branch: https://github.com/adospace/reactorui-maui/tree/xaml-integration

thee you can find a sample using the xaml-maui.reactor feature

AswinPG commented 1 year ago

The feature is still WIP and to be honest I'm not sure whether to publish it or not ( :) ). Anyway, if you want to check it out, please download this branch: https://github.com/adospace/reactorui-maui/tree/xaml-integration

thee you can find a sample using the xaml-maui.reactor feature

Thanks I'll check if out. Any reason why you're not sure to publish it? It'll definitely help more people come to maui reactor easily

adospace commented 1 year ago

Mixing MVU and MVVM in a single app could be somewhat confusing: it can be helpful in some cases but certainly could lead to a disaster if not done correctly.

juanyacovino77 commented 1 year ago

why not just to define and to pass parameters (aka component props") to OnMount() methods or maybe using the constructor insted of using State mechanism?

adospace commented 1 year ago

Starting with version 1.0.138, MauiReactor allows the integration of components in standard XAML or C# based applications using the ComponentHost control.

For more info please take a look at the documentation: https://adospace.gitbook.io/mauireactor/components/xaml-integration

Enjoy!

juanyacovino77 commented 1 year ago

Starting with version 1.0.138, MauiReactor allows the integration of components in standard XAML or C# based applications using the ComponentHost control.

For more info please take a look at the documentation: https://adospace.gitbook.io/mauireactor/components/xaml-integration

Enjoy!

Would this allow us to use MauiReactor components inside an UNO PLATFORM app?

adospace commented 1 year ago

@juanyacovino77 no, MauiReactor works on top of .NET Maui only

juanyacovino77 commented 1 year ago

Hey,

How is FlyoutPage supposed to be used at MauiReactor?

There are not FlyoutPage.Flyout nor FlyoutPage.Details properties registered neither SelectionChanged events for listening to selection of a FlyoutPageItem to display details of it..

Thankss

adospace commented 1 year ago

@juanyacovino77 have you seen the documentation: https://adospace.gitbook.io/mauireactor/components/navigation/shell ?

please open new tickets for any issues you may encounter, I'm using the ticket for announcements and general comments, thanks

juanyacovino77 commented 1 year ago

@juanyacovino77 have you seen the documentation: https://adospace.gitbook.io/mauireactor/components/navigation/shell ?

please open new tickets for any issues you may encounter, I'm using the ticket for announcements and general comments, thanks

Yes, I 've seen it. But I want to use FlyoutPage not to use FlyoutItem within a Shell app. Is it possible to just use FlyoutPage without shell app at maui reactor?

adospace commented 1 year ago

@juanyacovino77 here there is an example: https://github.com/adospace/kee-mind/blob/main/src/KeeMind/Pages/MainPage.cs

Please open a new ticket if you have further questions

Ohior commented 1 year ago

I just discovered MauiReactor, XAML Looks scary, I have been testing it for some days now before I will use it for production. I can't seem to find a way to navigate from one page to another and share data between them. I am new to both C# and XAML, I prefer MauiReactor because unlike flutter and compose you can test your app on IPhone devices when developing on windows,

tcsaddul commented 1 year ago

Maybe you should first look at the Sample Apps https://github.com/adospace/mauireactor-samples. The Chateo app has some pages in it.

adospace commented 1 year ago

@Ohior please take a look at the documentation: https://adospace.gitbook.io/mauireactor/components/navigation

Ohior commented 1 year ago

@Ohior please take a look at the documentation: https://adospace.gitbook.io/mauireactor/components/navigation

Thanks, This is a lot easy to understand and implement

Ohior commented 1 year ago

I have read the document on implementing popup and it is tedious to implement. Is there a simpler way. I still have not figured it out.

Also there are so many namespace conflicts, this makes me spend a lot of time debugging. For someone new this might be a big issue.

Code-DJ commented 1 year ago

Hi @adospace, just FYI - I did an upgrade to .net 8 rc1 to see how well it works. As soon as I ran the solution, found that button click didn't work. Is it because of Maui.Reactor's dependency on .net 7? Not planning on upgrade until GA, was just curious of the dependencies. Thanks!

raselldev commented 1 year ago

Hi @adospace current version is stable release?