formz icon indicating copy to clipboard operation
formz copied to clipboard

We would like to have map, whenMap etc in FormzStatus

Open 2shrestha22 opened this issue 4 years ago • 3 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 avatar Feb 19 '21 14:02 2shrestha22

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

LeonardoRosaa avatar Mar 04 '21 11:03 LeonardoRosaa

@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.

2shrestha22 avatar Mar 05 '21 01:03 2shrestha22

@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();
    }
  }
}

iamarnas avatar Feb 15 '22 09:02 iamarnas