Verified Commit 3c0efbd6 authored by Merzough Münker's avatar Merzough Münker
Browse files

feat: add submit successful form directive

parent 06d8199b
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@
  <component name="ProjectModuleManager">
    <modules>
      <module fileurl="file://$PROJECT_DIR$/../nest/.idea/nest.iml" filepath="$PROJECT_DIR$/../nest/.idea/nest.iml" />
      <module fileurl="file://$PROJECT_DIR$/../plugins/.idea/plugins.iml" filepath="$PROJECT_DIR$/../plugins/.idea/plugins.iml" />
      <module fileurl="file://$PROJECT_DIR$/.idea/rxap.iml" filepath="$PROJECT_DIR$/.idea/rxap.iml" />
      <module fileurl="file://$PROJECT_DIR$/../schematics/.idea/schematics.iml" filepath="$PROJECT_DIR$/../schematics/.idea/schematics.iml" />
    </modules>
+0 −1
Original line number Diff line number Diff line
@@ -13,7 +13,6 @@
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="module" module-name="plugins" />
    <orderEntry type="module" module-name="schematics" />
    <orderEntry type="module" module-name="nest" />
  </component>
+39 −0
Original line number Diff line number Diff line
import {
  Directive,
  Inject,
  TemplateRef,
  ViewContainerRef,
  OnDestroy,
  AfterViewInit
} from '@angular/core';
import { FormDirective } from './form.directive';
import { Subscription } from 'rxjs';
import { tap } from 'rxjs/operators';

@Directive({
  selector: '[rxapFormSubmitSuccessful]'
})
export class FormSubmitSuccessfulDirective implements AfterViewInit, OnDestroy {

  private subscription?: Subscription;

  constructor(
    @Inject(FormDirective) private readonly formDirective: FormDirective,
    @Inject(TemplateRef) private readonly template: TemplateRef<{ $implicit: Error }>,
    @Inject(ViewContainerRef) private readonly viewContainerRef: ViewContainerRef
  ) {}

  public ngAfterViewInit() {
    this.subscription = this.formDirective.submitSuccessful$.pipe(
      tap(result => {
        this.viewContainerRef.clear();
        this.viewContainerRef.createEmbeddedView(this.template, { $implicit: result });
      })
    ).subscribe();
  }

  public ngOnDestroy() {
    this.subscription?.unsubscribe();
  }

}
+4 −0
Original line number Diff line number Diff line
@@ -129,6 +129,9 @@ export class FormDirective<T extends Record<string, any> = any>
  @Output()
  public invalidSubmit = new EventEmitter();

  @Output('submitSuccessful')
  public submitSuccessful$ = new EventEmitter();

  @HostBinding('class.rxap-submitting')
  public get submitting(): boolean {
    return this.submitting$.value;
@@ -481,6 +484,7 @@ export class FormDirective<T extends Record<string, any> = any>
  }

  protected submitSuccessful(value: any) {
    this.submitSuccessful$.next(value);
    if (this.submitSuccessfulMethod) {
      this.submitSuccessfulMethod.call(value);
    } else if (isDevMode()) {
+5 −2
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ import { FormSubmitDirective } from './form-submit.directive';
import { FormGroupNameDirective } from './form-group-name.directive';
import { FormControlNameDirective } from './form-control-name.directive';
import { ParentControlContainerDirective } from './parent-control-container.directive';
import { FormSubmitSuccessfulDirective } from './form-submit-successful.directive';


@NgModule({
@@ -32,7 +33,8 @@ import { ParentControlContainerDirective } from './parent-control-container.dire
    FormSubmitDirective,
    FormGroupNameDirective,
    FormControlNameDirective,
    ParentControlContainerDirective
    ParentControlContainerDirective,
    FormSubmitSuccessfulDirective,
  ],
  exports:      [
    FormDirective,
@@ -49,7 +51,8 @@ import { ParentControlContainerDirective } from './parent-control-container.dire
    FormSubmitDirective,
    FormGroupNameDirective,
    FormControlNameDirective,
    ParentControlContainerDirective
    ParentControlContainerDirective,
    FormSubmitSuccessfulDirective,
  ]
})
export class RxapFormsModule {}