view data fixes
This commit is contained in:
@@ -12,17 +12,22 @@
|
||||
* - Must be named *ViewDataBuilder
|
||||
* - Must have 'use client' directive
|
||||
* - Must implement static build() method
|
||||
* - Must use 'satisfies' for static type enforcement
|
||||
*/
|
||||
|
||||
import { JsonValue } from '../types/primitives';
|
||||
import { ViewData } from '../view-data/ViewData';
|
||||
|
||||
export interface ViewDataBuilder<TDTO extends JsonValue, TViewData extends ViewData> {
|
||||
/**
|
||||
* Transform DTO into ViewData
|
||||
*
|
||||
* @param dto - API Transport DTO (JSON-serializable)
|
||||
* @returns ViewData for template
|
||||
*/
|
||||
build(dto: TDTO): TViewData;
|
||||
/**
|
||||
* ViewData Builder Contract (Static)
|
||||
*
|
||||
* TDTO is constrained to object to ensure it is a serializable API DTO.
|
||||
*
|
||||
* Usage:
|
||||
* export class MyViewDataBuilder {
|
||||
* static build(apiDto: MyDTO): MyViewData { ... }
|
||||
* }
|
||||
* MyViewDataBuilder satisfies ViewDataBuilder<MyDTO, MyViewData>;
|
||||
*/
|
||||
export interface ViewDataBuilder<TDTO extends object, TViewData extends ViewData> {
|
||||
build(apiDto: TDTO): TViewData;
|
||||
}
|
||||
@@ -12,17 +12,21 @@
|
||||
* - Must be named *ViewModelBuilder
|
||||
* - Must have 'use client' directive
|
||||
* - Must implement static build() method
|
||||
* - Must use 'satisfies' for static type enforcement
|
||||
*/
|
||||
|
||||
import { ViewData } from '../view-data/ViewData';
|
||||
import { ViewModel } from '../view-models/ViewModel';
|
||||
|
||||
/**
|
||||
* ViewModel Builder Contract (Static)
|
||||
*
|
||||
* Usage:
|
||||
* export class MyViewModelBuilder {
|
||||
* static build(viewData: MyViewData): MyViewModel { ... }
|
||||
* }
|
||||
* MyViewModelBuilder satisfies ViewModelBuilder<MyViewData, MyViewModel>;
|
||||
*/
|
||||
export interface ViewModelBuilder<TViewData extends ViewData, TViewModel extends ViewModel> {
|
||||
/**
|
||||
* Transform ViewData into ViewModel
|
||||
*
|
||||
* @param viewData - ViewData (JSON-serializable template-ready data)
|
||||
* @returns ViewModel
|
||||
*/
|
||||
build(viewData: TViewData): TViewModel;
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
import { JsonValue } from "../types/primitives";
|
||||
|
||||
/**
|
||||
* Base interface for ViewData objects
|
||||
*
|
||||
@@ -8,9 +10,8 @@
|
||||
* architectural rule is that these must be plain JSON objects.
|
||||
*/
|
||||
export interface ViewData {
|
||||
[key: string]: any;
|
||||
[key: string]: JsonValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper type to ensure a type is ViewData-compatible
|
||||
*
|
||||
|
||||
@@ -29,9 +29,9 @@
|
||||
export abstract class ViewModel {
|
||||
/**
|
||||
* Optional: Validate the ViewModel state
|
||||
*
|
||||
*
|
||||
* Can be used to ensure the ViewModel is in a valid state
|
||||
* before a Presenter converts it to ViewData.
|
||||
* before it is used by the UI.
|
||||
*/
|
||||
validate?(): boolean;
|
||||
}
|
||||
Reference in New Issue
Block a user