eManPrague / frui.ts

Pragmatic MVVM frontend framework
MIT License
14 stars 5 forks source link

#44 Exposed EntityValidationRules #45

Closed kopecmi8 closed 3 years ago

gius commented 3 years ago

24

kopecmi8 commented 3 years ago

Použití pak může vypadat jako

import { PropertyName } from "@frui.ts/helpers";
import { AutomaticEntityValidator } from "@frui.ts/validation";

export function hasAutomaticValidation<TTarget>(target: any): target is IHasAutomaticValidation<TTarget> {
  return (
    (target as IHasAutomaticValidation<TTarget>)?.__validation !== undefined &&
    target.__validation.entityValidationRules !== undefined
  );
}

export interface IHasAutomaticValidation<TTarget> {
  __validation: AutomaticEntityValidator<TTarget>;
}

export default function hasRequiredProperty<TTarget>(entity: IHasAutomaticValidation<TTarget>, property: PropertyName<TTarget>) {
  if (entity?.__validation?.entityValidationRules?.[property]?.requiredIf) {
    return entity?.__validation?.entityValidationRules?.[property]?.requiredIf.condition(entity);
  }

  return !!entity?.__validation?.entityValidationRules?.[property]?.required;
}

Otázka je jestlii ten IHasAutomaticValidation a hasAutomaticValidation nepřidat taky přímo do Frui.ts. A nebo druhá možnost rozšířit o entityValidationRules přímo interface IEntityValidator, ale pro manuální validátory mi nedává moc smysl mít tam tudle property....

gius commented 3 years ago

Souhlas, přidejme IHasAutomaticValidation a hasAutomaticValidation do frui.ts