Unofficial mdasboard vs official dashboard

Hi,

As I am facing issues with the mdashboard node (layout feature not working with node-red version 2.1.4), I am wondering if the below mdashboard specific feature is still only available in this contrib or also in the official dashboard (since the creation of mdashboard, it may have been included?):

https://github.com/umasudhan/node-red-contrib-mdashboard

For example, if two users have the same dashboard open and one user types into a text input, the other user will not get the text update. This works well when a typical web form like behavior is needed- multiple users can use the same dashboard url as a form to submit data back to the flow.

Using standard dashboard, two different browsers on the same PC, what one types in the text input field is visible on both.

That node is no longer being maintained and hasn't been updated in 2 years.

I believe the main intent of the author was to enable multi-client support in the front-end and that may be the only real difference?

Of course, Dashboard has moved forward a LOT in the last two years thanks to the sterling efforts of @dceejay and the other folk who have provided extension nodes.

Thanks but do you think it is possible now to achieve the same result with the standard dashboard and avoid multiple users to see the same ?

Same issue with the Dashboard node, then it is not specific to mdashboard, I created an issue in github...

Please provide a link to the issue.

Do you have both dashboards installed at the same time? I believe that will cause some issues. Only have one installed at a time.

".... it is possible now to achieve the same result with the standard dashboard and avoid multiple users to see the same?"

It is ...but its best to not think of it as multi user. The solution achieved by mdashboard was '

disableFeedbackToAllSessions

It just keeps each user from seeing the update to the page from another user. This solution I worked on with @dceejay ... but it has issues with the state of switches (true/false) because if one user turns a button/switch from on to off (true to false) then no other users will see the state has changed.

Over time working on including disableFeedbackToAllSessions to the official dashboard I began to see things dcejay's way and realized what I was doing was stupid: quote from the msg I sent him:

" I've had a total paradigm shift in my thoughts on disableFeedbackToAllSessions idea.

I'm sure I'm in the top 10% of people who push the dashboard to its limits without using a template node and now I'm having second thoughts on this path. I'm now thinking making dashboard have this functionality is like making a 11second 1/4 mile Reliant Robin. It's cool and all but a waste of time. Better/cheeper to buy a car made for the task. The amount of maintenance required is not worth it.

The only reason I wanted disableFeedbackToAllSessions was overhead.

Right now I use individual docker instances or individual linux users all running their own copy of node-red dashboard. Its real easy as I have a main admin page without access to the outside world spin up/down users as needed. Sure it costs me in ram(to be safe) but the old dell 620rx 20 core is never really burdened by it.

I'm starting to wonder if I'm trying to solve a non problem for the sake of tinkering."

I did complete most of the work needed however. If you wish to integrate it into dashboard see these links and have at it. But as dashboard is approaching end of life and both dceejay and I not wanting to include it you will be on your own.

Good luck.

1 Like

And of course, if you want complete freedom to do anything, maybe consider uibuilder :slight_smile:

Not much handholding for the UI design but you get to use any (or no) framework and do whatever you like.

2 Likes

Yes I have both, I will try to keep only one

I started testing uibuilder with bootstrap and vuejs, indeed nice, it is great also to start from the sample. I need to understand how to inject data first too…

1 Like

That is easy - at least for simple data. Try creating a div in your html:

<div>{{myvar}}</div>

And define that in your index.js file:

data() { return {
    myvar: '',
}),

also in the .js file,

mounted: function(){
    const app = this

    uibuilder.onChange('msg', function(msg){
        app.myvar = msg.payload
    })
},

Send some messages with msg.payload set to a string and see the UI change magically :grinning:

It can be slightly more complex if you have a complex object that you are dealing with - the trick there is to predefine the object as much as possible - with dummy values - in your data section so that VueJS understands that it needs to pay attention to the deep parts of the object. You can also force VueJS to take note as well if you need to but best to avoid that if you can.