forked from Eilon/MauiHybridWebView
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMainPage.xaml.cs
71 lines (56 loc) · 1.98 KB
/
MainPage.xaml.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using System.Diagnostics;
namespace MauiReactJSHybridApp
{
public partial class MainPage : ContentPage
{
private readonly TodoDataStore _todoDataStore;
public MainPage()
{
InitializeComponent();
_todoDataStore = new TodoDataStore();
_todoDataStore.TaskDataChanged += OnTodoDataChanged;
myHybridWebView.JSInvokeTarget = new TodoJSInvokeTarget(this, _todoDataStore);
BindingContext = this;
}
public string TodoAppTitle => $"Todo items: {_todoDataStore.GetData().Count}";
private void OnTodoDataChanged(object sender, EventArgs e)
{
OnPropertyChanged(nameof(TodoAppTitle));
}
private async void SendUpdatedTasksToJS(IList<TodoTask> tasks)
{
_ = await MainThread.InvokeOnMainThreadAsync(async () =>
await myHybridWebView.InvokeJsMethodAsync("globalSetData", tasks));
}
private sealed class TodoJSInvokeTarget
{
private MainPage _mainPage;
private readonly TodoDataStore _todoDataStore;
public TodoJSInvokeTarget(MainPage mainPage, TodoDataStore todoDataStore)
{
_mainPage = mainPage;
_todoDataStore = todoDataStore;
}
public void StartTaskLoading()
{
_mainPage.SendUpdatedTasksToJS(_todoDataStore.GetData());
}
public void AddTask(TodoTask newTask)
{
_todoDataStore.AddTask(newTask);
}
public void EditTask(string id, string newName)
{
_todoDataStore.EditTask(id, newName);
}
public void DeleteTask(string id)
{
_todoDataStore.DeleteTask(id);
}
public void ToggleCompletedTask(string id)
{
_todoDataStore.ToggleCompletedTask(id);
}
}
}
}