Angular project using NgRx pattern to manage state of a system

project-update.component.html 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <div class="container" *ngIf="projectFormGroup">
  2. <ng-container *ngIf="projectState" [ngSwitch]="projectState.msgState">
  3. <ng-container *ngSwitchCase="msgState.FORM_LOADING">
  4. {{ projectState.msgState }}
  5. </ng-container>
  6. <ng-container *ngSwitchCase="msgState.FORM_LOAD_ERR">
  7. {{ projectState.msgState }}
  8. </ng-container>
  9. <ng-container *ngSwitchCase="msgState.FORM_LOADED">
  10. <!-- create form -->
  11. <div class="card mt-3">
  12. <div class="card-header bg-light">
  13. >> Project ID: <b>{{ projectState.currentProject?.id }}</b>, User ID:
  14. <b>{{ projectState.currentProject?.userId }}</b>, Company ID:
  15. <b>{{ projectState.currentProject?.companyId }}</b>
  16. </div>
  17. <div class="card-body">
  18. <form
  19. [formGroup]="projectFormGroup"
  20. (ngSubmit)="onProjectUpdate(); projectFormGroup.reset()"
  21. >
  22. <div class="row">
  23. <!-- 1ère colonne -->
  24. <div class="col">
  25. <div class="col-md-auto mb-3">
  26. <label for="projectName">Project name</label>
  27. <input
  28. type="text"
  29. formControlName="projectName"
  30. class="form-control"
  31. [ngClass]="{
  32. 'is-invalid':
  33. projectFormGroup.controls['projectName'].touched &&
  34. !projectFormGroup.controls['projectName'].valid
  35. }"
  36. />
  37. <div class="invalid-feedback">
  38. <span
  39. *ngIf="projectFormGroup.controls['projectName'].errors?.['required']"
  40. >required</span
  41. >
  42. <span
  43. *ngIf="projectFormGroup.controls['projectName'].errors?.['minlength']"
  44. >min nbr chars 5</span
  45. >
  46. <span
  47. *ngIf="projectFormGroup.controls['projectName'].errors?.['maxlength']"
  48. >min nbr chars 20</span
  49. >
  50. </div>
  51. </div>
  52. <div class="col-md-auto mb-3">
  53. <label for="priority">Priority</label>
  54. <select formControlName="priority" class="form-control">
  55. <option value="Choose a priority" disabled>
  56. Choose a priority
  57. </option>
  58. <option
  59. *ngFor="let priority of priorities"
  60. [ngValue]="priority"
  61. >
  62. {{ priority }}
  63. </option>
  64. </select>
  65. </div>
  66. </div>
  67. <!-- 2ème colonne -->
  68. <div class="col">
  69. <div class="col-md-auto mb-3">
  70. <label for="description">Description</label>
  71. <input
  72. type="text"
  73. formControlName="description"
  74. class="form-control"
  75. [ngClass]="{
  76. 'is-invalid':
  77. projectFormGroup.controls['description'].touched &&
  78. !projectFormGroup.controls['description'].valid
  79. }"
  80. />
  81. <div class="invalid-feedback">
  82. <span
  83. *ngIf="projectFormGroup.controls['description'].errors?.['required']"
  84. >required</span
  85. >
  86. <span
  87. *ngIf="projectFormGroup.controls['description'].errors?.['minlength']"
  88. >min desc chars 25</span
  89. >
  90. </div>
  91. </div>
  92. <div class="col-md-auto mb-3">
  93. <label for="state">State</label>
  94. <select formControlName="state" class="form-control">
  95. <option
  96. *ngFor="let state of projectMsgState | keyvalue"
  97. [ngValue]="state.value"
  98. >
  99. {{ state.value }}
  100. </option>
  101. </select>
  102. </div>
  103. </div>
  104. </div>
  105. <div class="col-md-auto mb-3">
  106. <label for="userId"
  107. >ReAssign project to another user, choose user ID</label
  108. >
  109. <select formControlName="userId" class="form-control">
  110. <option [ngValue]="null" desabled>choose user ID</option>
  111. <option
  112. *ngFor="let user of userState.usersList"
  113. [ngValue]="user.id"
  114. >
  115. {{ user.id }}
  116. </option>
  117. </select>
  118. </div>
  119. <div class="text-center col-md-auto mt-3">
  120. <button
  121. class="btn btn-outline-primary"
  122. type="submit"
  123. [disabled]="!projectFormGroup.valid"
  124. >
  125. update
  126. </button>
  127. </div>
  128. </form>
  129. </div>
  130. </div>
  131. </ng-container>
  132. <ng-container *ngSwitchCase="msgState.UPDATED">
  133. <div class="alert-success container p-3 m-3" style="width: 30em">
  134. <button class="btn btn-success" (click)="onUpdateOk()">
  135. {{ projectState.msgState }}
  136. </button>
  137. </div>
  138. </ng-container>
  139. </ng-container>
  140. </div>

Powered by TurnKey Linux.