From 66a88ac1b196e132aba20b22c1d06ec5fa411c4c Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Sun, 27 Sep 2026 02:31:21 +0200 Subject: [PATCH] add contact viewmodels --- .../{contactsModel.ts => contactListModel.ts} | 5 +-- src/ViewModel/Global/contactViewModel.ts | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) rename src/Model/Global/{contactsModel.ts => contactListModel.ts} (86%) create mode 100644 src/ViewModel/Global/contactViewModel.ts diff --git a/src/Model/Global/contactsModel.ts b/src/Model/Global/contactListModel.ts similarity index 86% rename from src/Model/Global/contactsModel.ts rename to src/Model/Global/contactListModel.ts index 86a41dd5..3741ede0 100644 --- a/src/Model/Global/contactsModel.ts +++ b/src/Model/Global/contactListModel.ts @@ -1,6 +1,6 @@ import StorageModel, {StorageModelSubPaths} from "./storageModel"; -export default class ContactsModel { +export default class ContactListModel { private getContactPath = (contactId: string): string[] => { return [StorageModelSubPaths.ContactsModel, contactId]; } @@ -16,6 +16,5 @@ export default class ContactsModel { this.storageModel.write(path, name) } - constructor(public storageModel: StorageModel) { - } + constructor(public storageModel: StorageModel) {} } diff --git a/src/ViewModel/Global/contactViewModel.ts b/src/ViewModel/Global/contactViewModel.ts new file mode 100644 index 00000000..ef36b6fd --- /dev/null +++ b/src/ViewModel/Global/contactViewModel.ts @@ -0,0 +1,42 @@ +import ContactListModel from "../../Model/Global/contactListModel"; +import * as React from "../../react"; + +export default class ContactListViewModel { + // state + contacts: React.MapState = new React.MapState(); + + // main + updateContact = (id: string, name: string): void => { + if (this.contacts.value.has(id)) { + this.contacts.value.get(id)!.name.value = name; + return; + } + const vm = new ContactViewModel(id, name); + this.contacts.set(id, vm); + this.contactListModel.storeContact(id, name); + } + + // load + loadData = (): void => { + const contacts: [string, string][] = this.contactListModel.loadContacts(); + for (const contact of contacts) { + const vm = new ContactViewModel(...contact); + this.contacts.set(vm.id, vm); + } + } + + // init + constructor(public contactListModel: ContactListModel) { + this.loadData(); + } +} + +export class ContactViewModel { + // state + name: React.State = new React.State(""); + + // init + constructor(public id: string, name: string) { + this.name.value = name; + } +}