/* * This file belongs to Hoist, an application development toolkit * developed by Extremely Heavy Industries (www.xh.io | info@xh.io) * * Copyright © 2026 Extremely Heavy Industries Inc. */ import {throwIf} from '@xh/hoist/utils/js'; import {PersistenceProvider, PersistenceProviderConfig} from '../PersistenceProvider'; import type {ViewManagerModel} from '@xh/hoist/cmp/viewmanager/ViewManagerModel'; /** * PersistenceProvider that delegates state storage to a ViewManagerModel, enabling components * to persist their state as part of user-managed named views. * * @see ViewManagerModel * @see PersistenceProvider */ export class ViewManagerProvider extends PersistenceProvider { readonly viewManagerModel: ViewManagerModel; constructor(cfg: PersistenceProviderConfig) { super(cfg); const {viewManagerModel} = cfg.persistOptions; throwIf(!viewManagerModel, `ViewManagerProvider requires a 'viewManagerModel'.`); this.viewManagerModel = viewManagerModel; viewManagerModel.registerProvider(this); } //---------------- // Implementation //---------------- override readRaw() { return this.viewManagerModel.getValue(); } override writeRaw(data: Record) { this.viewManagerModel.setValue(data); } override destroy() { this.viewManagerModel?.unregisterProvider(this); super.destroy(); } }