VeryGoodOpenSource / formz

A unified form representation in Dart used at Very Good Ventures 🦄

Home Page:https://pub.dev/packages/formz

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

We would like to have map, whenMap etc in FormzStatus

2shrestha22 opened this issue · comments

We would like to have map, whenMap etc in FormzStatus so that it will be easy to check the formzStatus instead of if elseif.

@2shrestha22 You can show an example of this feature?

@2shrestha22 You can show an example of this feature?

If we need to check the formzStatus then we need to do if else. If it have map then we easily do this without if else like we do in freezed. It is just my opinion and I don't know if this will be feasible or not.

commented

@2shrestha22 You can use this extension for check status

extension FormzStatusExtension on FormzStatus {
  bool get isPure => this == FormzStatus.pure;
  bool get isValid => this == FormzStatus.valid;
  bool get isInvalid => this == FormzStatus.invalid;
  bool get isSubmissionInProgress => this == FormzStatus.submissionInProgress;
  bool get isSubmissionSuccess => this == FormzStatus.submissionSuccess;
  bool get isSubmissionFailure => this == FormzStatus.submissionFailure;
  bool get isSubmissionCanceled => this == FormzStatus.submissionCanceled;

  R map<R>({
    required R Function(FormzStatus pure) pure,
    required R Function(FormzStatus valid) valid,
    required R Function(FormzStatus invalid) invalid,
    required R Function(FormzStatus submissionInProgress) submissionInProgress,
    required R Function(FormzStatus submissionSuccess) submissionSuccess,
    required R Function(FormzStatus submissionFailure) submissionFailure,
    required R Function(FormzStatus submissionCanceled) submissionCanceled,
  }) {
    switch (this) {
      case FormzStatus.pure:
        return pure(this);
      case FormzStatus.valid:
        return valid(this);
      case FormzStatus.invalid:
        return invalid(this);
      case FormzStatus.submissionInProgress:
        return submissionInProgress(this);
      case FormzStatus.submissionSuccess:
        return submissionSuccess(this);
      case FormzStatus.submissionFailure:
        return submissionFailure(this);
      case FormzStatus.submissionCanceled:
        return submissionCanceled(this);
    }
  }

  R? mapOrNull<R>({
    R Function(FormzStatus pure)? pure,
    R Function(FormzStatus valid)? valid,
    R Function(FormzStatus invalid)? invalid,
    R Function(FormzStatus submissionInProgress)? submissionInProgress,
    R Function(FormzStatus submissionSuccess)? submissionSuccess,
    R Function(FormzStatus submissionFailure)? submissionFailure,
    R Function(FormzStatus submissionCanceled)? submissionCanceled,
  }) {
    switch (this) {
      case FormzStatus.pure:
        return pure?.call(this);
      case FormzStatus.valid:
        return valid?.call(this);
      case FormzStatus.invalid:
        return invalid?.call(this);
      case FormzStatus.submissionInProgress:
        return submissionInProgress?.call(this);
      case FormzStatus.submissionSuccess:
        return submissionSuccess?.call(this);
      case FormzStatus.submissionFailure:
        return submissionFailure?.call(this);
      case FormzStatus.submissionCanceled:
        return submissionCanceled?.call(this);
    }
  }

  R maybeMap<R>({
    R Function(FormzStatus pure)? pure,
    R Function(FormzStatus valid)? valid,
    R Function(FormzStatus invalid)? invalid,
    R Function(FormzStatus submissionInProgress)? submissionInProgress,
    R Function(FormzStatus submissionSuccess)? submissionSuccess,
    R Function(FormzStatus submissionFailure)? submissionFailure,
    R Function(FormzStatus submissionCanceled)? submissionCanceled,
    required R Function() orElse,
  }) {
    if (this == FormzStatus.pure && pure != null) {
      return pure(this);
    } else if (this == FormzStatus.valid && valid != null) {
      return valid(this);
    } else if (this == FormzStatus.submissionInProgress &&
        submissionInProgress != null) {
      return submissionInProgress(this);
    } else if (this == FormzStatus.submissionSuccess &&
        submissionSuccess != null) {
      return submissionSuccess(this);
    } else if (this == FormzStatus.submissionSuccess &&
        submissionFailure != null) {
      return submissionFailure(this);
    } else if (this == FormzStatus.submissionCanceled &&
        submissionCanceled != null) {
      return submissionCanceled(this);
    } else {
      return orElse();
    }
  }

  R maybeWhen<R>({
    R Function()? pure,
    R Function()? valid,
    R Function()? invalid,
    R Function()? submissionInProgress,
    R Function()? submissionSuccess,
    R Function()? submissionFailure,
    R Function()? submissionCanceled,
    required R Function() orElse,
  }) {
    if (this == FormzStatus.pure && pure != null) {
      return pure();
    } else if (this == FormzStatus.valid && valid != null) {
      return valid();
    } else if (this == FormzStatus.submissionInProgress &&
        submissionInProgress != null) {
      return submissionInProgress();
    } else if (this == FormzStatus.submissionSuccess &&
        submissionSuccess != null) {
      return submissionSuccess();
    } else if (this == FormzStatus.submissionSuccess &&
        submissionFailure != null) {
      return submissionFailure();
    } else if (this == FormzStatus.submissionCanceled &&
        submissionCanceled != null) {
      return submissionCanceled();
    } else {
      return orElse();
    }
  }

  R? whenOrNull<R>({
    R Function()? pure,
    R Function()? valid,
    R Function()? invalid,
    R Function()? submissionInProgress,
    R Function()? submissionSuccess,
    R Function()? submissionFailure,
    R Function()? submissionCanceled,
  }) {
    switch (this) {
      case FormzStatus.pure:
        return pure?.call();
      case FormzStatus.valid:
        return valid?.call();
      case FormzStatus.invalid:
        return invalid?.call();
      case FormzStatus.submissionInProgress:
        return submissionInProgress?.call();
      case FormzStatus.submissionSuccess:
        return submissionSuccess?.call();
      case FormzStatus.submissionFailure:
        return submissionFailure?.call();
      case FormzStatus.submissionCanceled:
        return submissionCanceled?.call();
    }
  }

  R when<R>({
    required R Function() pure,
    required R Function() valid,
    required R Function() invalid,
    required R Function() submissionInProgress,
    required R Function() submissionSuccess,
    required R Function() submissionFailure,
    required R Function() submissionCanceled,
  }) {
    switch (this) {
      case FormzStatus.pure:
        return pure();
      case FormzStatus.valid:
        return valid();
      case FormzStatus.invalid:
        return invalid();
      case FormzStatus.submissionInProgress:
        return submissionInProgress();
      case FormzStatus.submissionSuccess:
        return submissionSuccess();
      case FormzStatus.submissionFailure:
        return submissionFailure();
      case FormzStatus.submissionCanceled:
        return submissionCanceled();
    }
  }
}