1 <cd-modal [modalRef]="activeModal">
2 <ng-container i18n="form title"
3 class="modal-title">{{ action | titlecase }} {{ resource | upperFirst }}</ng-container>
4 <ng-container class="modal-content"
5 *cdFormLoading="loading">
6 <form name="snapScheduleForm"
8 [formGroup]="snapScheduleForm"
10 <div class="modal-body">
12 <div class="form-group row">
13 <label class="cd-col-form-label required"
17 <div class="cd-col-form-input">
18 <div class="input-group">
19 <input id="typeahead-http"
23 disabled="directoryStore.isLoading"
24 formControlName="directory"
25 [ngbTypeahead]="search"
26 [placeholder]="directoryStore.isLoading ? 'Loading directories' : 'Directory search'" />
27 <div *ngIf="directoryStore.isLoading">
28 <i [ngClass]="[icons.spinner, icons.spin, 'mt-2', 'me-2']"></i>
31 <span class="invalid-feedback"
32 *ngIf="snapScheduleForm.showError('directory', formDir, 'required')"
33 i18n>This field is required.</span>
34 <span class="invalid-feedback"
35 *ngIf="snapScheduleForm.showError('directory', formDir, 'notUnique')"
36 i18n>A snapshot schedule for this path already exists.</span>
40 <div class="form-group row">
41 <label class="cd-col-form-label required"
45 <div class="cd-col-form-input">
46 <div class="input-group">
47 <input class="form-control"
48 placeholder="yyyy-mm-dd"
51 formControlName="startDate"
60 <i [ngClass]="icons.calendar"></i>
63 <span class="invalid-feedback"
64 *ngIf="snapScheduleForm.showError('startDate', formDir, 'required')"
65 i18n>This field is required.</span>
69 <div class="form-group row">
70 <label class="cd-col-form-label required"
73 <cd-helper>The time zone is assumed to be UTC.</cd-helper>
75 <div class="cd-col-form-input">
76 <ngb-timepicker [spinners]="false"
79 formControlName="startTime"
81 name="startTime"></ngb-timepicker>
82 <span class="invalid-feedback"
83 *ngIf="snapScheduleForm.showError('startTime', formDir, 'required')"
84 i18n>This field is required.</span>
87 <!-- Repeat interval -->
88 <div class="form-group row">
89 <label class="cd-col-form-label required"
93 <div class="cd-col-form-input">
94 <div class="input-group">
95 <input class="form-control"
100 formControlName="repeatInterval">
101 <select [ngClass]="['form-select', 'me-5']"
103 name="repeatFrequency"
104 formControlName="repeatFrequency"
105 *ngIf="repeatFrequencies">
106 <option *ngFor="let freq of repeatFrequencies"
108 i18n>{{ freq[0] }}</option>
111 <span class="invalid-feedback"
112 *ngIf="snapScheduleForm.showError('repeatFrequency', formDir, 'notUnique')"
113 i18n>This schedule already exists for the selected directory.</span>
114 <span class="invalid-feedback"
115 *ngIf="snapScheduleForm.showError('repeatInterval', formDir, 'required')"
116 i18n>This field is required.</span>
117 <span class="invalid-feedback"
118 *ngIf="snapScheduleForm.showError('repeatInterval', formDir, 'min')"
119 i18n>Choose a value greater than 0.</span>
122 <!-- Retention policies -->
123 <ng-container formArrayName="retentionPolicies"
124 *ngFor="let retentionPolicy of retentionPolicies.controls; index as i">
125 <ng-container [formGroupName]="i">
126 <div class="form-group row">
127 <label [ngClass]="{'cd-col-form-label': true, 'visible': i == 0, 'invisible': i > 0}"
128 for="retentionInterval"
129 i18n>Retention policy
131 <div class="cd-col-form-input">
132 <div class="input-group">
133 <input class="form-control"
136 id="retentionInterval"
137 name="retentionInterval"
138 formControlName="retentionInterval">
139 <select class="form-select"
140 id="retentionFrequency"
141 name="retentionFrequency"
142 formControlName="retentionFrequency"
143 *ngIf="retentionFrequencies">
144 <option *ngFor="let freq of retentionFrequencies"
146 i18n>{{ freq[0] }}</option>
148 <button class="btn btn-light"
150 (click)="removeRetentionPolicy(i)">
151 <i [ngClass]="[icons.trash]"></i>
154 <span class="invalid-feedback"
155 *ngIf="snapScheduleForm.controls['retentionPolicies'].controls[i].invalid"
156 i18n>This retention policy already exists for the selected directory.</span>
161 <div class="d-flex flex-row align-content-center justify-content-end">
162 <button class="btn btn-light"
164 (click)="addRetentionPolicy()">
165 <i [ngClass]="[icons.add, 'me-2']"></i>
166 <span i18n>Add retention policy</span>
171 <div class="modal-footer">
172 <cd-form-button-panel (submitActionEvent)="submit()"
173 [form]="snapScheduleForm"
174 [submitText]="(action | titlecase) + ' ' + (resource | upperFirst)"></cd-form-button-panel>