File

repository/firmware/list/add-firmware-patch-modal.component.ts

Metadata

Index

Properties
Methods
Outputs

Constructor

constructor(modal: BsModalRef, repository: RepositoryService, alert: AlertService)
Parameters :
Name Type Optional
modal BsModalRef No
repository RepositoryService No
alert AlertService No

Outputs

saved
Type : EventEmitter<RepositoryCategory>

Methods

cancel
cancel()
Returns : void
Async ngOnInit
ngOnInit()
Returns : any
onFile
onFile(dropped: PickedFiles)
Parameters :
Name Type Optional
dropped PickedFiles No
Returns : void
Async save
save()
Returns : any
setInitialState
setInitialState()
Returns : void
successMsg
successMsg()
Returns : void

Properties

baseVersions$
Type : Observable<IResultList<IManagedObject>>
Default value : merge( this.firmwareInput$.pipe( tap(() => { this.model.dependency = null; if (this.form) { this.form.form.get('patchDependency').reset(); } }), switchMap(() => of(null)) ), this.firmwareSelected$ ).pipe( switchMap(selectedFirmware => selectedFirmware ? this.repository.listBaseVersions(selectedFirmware) : of(null) ), shareReplay(1) )
baseVersionsFilterPipe
Default value : pipe( switchMap((data: []) => this.patchDependencyInput$.pipe( map(partialVersion => data.filter((mo: any) => { const version = mo.c8y_Firmware.version.toLowerCase(); return ( partialVersion.length === 0 || version.indexOf(partialVersion.toLowerCase()) > -1 ); }) ) ) ) )
dropdown
Type : BsDropdownDirective
Decorators :
@ViewChild('dropdown', {static: false})
firmwareInput$
Default value : new BehaviorSubject<string>('')
firmwarePreselected
Type : boolean
Default value : false
firmwares$
Type : Observable<IResultList<IManagedObject>>
Default value : this.firmwareInput$.pipe( debounceTime(300), distinctUntilChanged(), switchMap(searchStr => from( this.repository.listRepositoryEntries(RepositoryType.FIRMWARE, { partialName: searchStr, skipLegacy: true }) ) ), shareReplay(1) )
firmwareSelected$
Default value : new BehaviorSubject<Partial<RepositoryCategory>>(null)
form
Type : NgForm
Decorators :
@ViewChild('firmwarePatchForm', {static: false})
model
Type : ModalModel
Default value : { selected: undefined, dependency: null, patchVersion: undefined, binary: { file: undefined, url: undefined } }
patchDependencyInput$
Default value : new BehaviorSubject<string>('')
saving
Default value : false
textForFirmwareUrlPopover
Type : string
Default value : gettext(`Path for binaries can vary depending on device agent implementation, for example: /firmware/binaries/firmware1.bin https://firmware/binary/123 ftp://firmware/binary/123.tar.gz `)
<div class="viewport-modal">
  <div class="modal-header dialog-header">
    <i [c8yIcon]="'c8y-firmware'"></i>
    <h4 translate>
      Add firmware patch
    </h4>
  </div>
  <div class="p-16 text-center separator-bottom">
    <p class="lead m-0" translate>
      Select a firmware version
    </p>
  </div>

  <form
    class="d-contents"
    autocomplete="off"
    #firmwarePatchForm="ngForm"
    (ngSubmit)="firmwarePatchForm.form.valid && save()">
    <div class="modal-inner-scroll">
      <div class="modal-body">
        <div [hidden]="firmwarePreselected">
          <c8y-form-group>
            <label for="firmwareName" translate>Firmware</label>
            <c8y-typeahead
              [ngModel]="model.selected"
              name="firmwareName"
              placeholder="{{ 'Select or enter' | translate }}"
              (onSearch)="firmwareInput$.next($event)"
              [allowFreeEntries]="false"
              [required]="true"
            >
              <c8y-li
                *c8yFor="let firmware of firmwares$ | async; loadMore: 'auto'"
                class="p-l-8 p-r-8 c8y-list__item--link"
                (click)="model.selected = firmware; firmwareSelected$.next(firmware)"
                [active]="model.selected === firmware"
              >
                <c8y-highlight
                  [text]="firmware.name || '--'"
                  [pattern]="firmwareInput$ | async"
                ></c8y-highlight>
              </c8y-li>
            </c8y-typeahead>
            <c8y-messages
              ><c8y-message
                name="notExisting"
                [text]="'Select one of the existing firmwares.' | translate"
              ></c8y-message>
            </c8y-messages>
          </c8y-form-group>
        </div>

        <c8y-form-group>
          <label for="patchDependency" class="m-r-8" translate>Version</label>
          <c8y-typeahead
            [ngModel]="model.dependency"
            name="patchDependency"
            placeholder="{{ 'Select or enter' | translate }}"
            (onSearch)="patchDependencyInput$.next($event)"
            [displayProperty]="'c8y_Firmware.version'"
            [allowFreeEntries]="false"
            [disabled]="
              (baseVersions$ | async) === null || (baseVersions$ | async)?.data.length === 0
            "
            [required]="true"
          >
            <c8y-li
              *c8yFor="
                let baseVersion of baseVersions$;
                loadMore: 'auto';
                pipe: baseVersionsFilterPipe
              "
              class="p-l-8 p-r-8 c8y-list__item--link"
              (click)="model.dependency = baseVersion"
              [active]="model.dependency === baseVersion"
            >
              <c8y-highlight
                [text]="baseVersion.c8y_Firmware.version || '--'"
                [pattern]="patchDependencyInput$ | async"
              ></c8y-highlight>
            </c8y-li>
          </c8y-typeahead>
          <c8y-messages
            ><c8y-message
              name="notExisting"
              [text]="'Select one of the existing versions.' | translate"
            ></c8y-message>
          </c8y-messages>
        </c8y-form-group>

        <c8y-form-group>
          <label for="patchVersion" translate>Patch</label>
          <input
            id="patchVersion"
            class="form-control"
            autocomplete="off"
            name="patchVersion"
            [(ngModel)]="model.patchVersion"
            placeholder="{{ 'e.g.' | translate }} 1.0.0"
            required
          />
        </c8y-form-group>

        <c8y-form-group>
          <div class="legend form-block m-t-40" translate>Patch file</div>
          <c8y-file-picker [maxAllowedFiles]="1" (onFilesPicked)="onFile($event)" [fileUrlPopover]="textForFirmwareUrlPopover">
          </c8y-file-picker>
        </c8y-form-group>
      </div>
    </div>
    <div class="modal-footer">
      <button
        title="{{ 'Cancel' | translate }}"
        class="btn btn-default"
        type="button"
        (click)="cancel()"
        [disabled]="saving"
        translate
      >
        Cancel
      </button>
      <button
        title="{{ 'Add firmware patch' | translate }}"
        class="btn btn-primary"
        type="submit"
        [ngClass]="{ 'btn-pending': saving }"
        [disabled]="
          !firmwarePatchForm.form.valid ||
          firmwarePatchForm.form.pristine ||
          (!model.binary?.url && !model.binary?.file) ||
          saving
        "
        translate
      >
        Add firmware patch
      </button>
    </div>
  </form>
</div>

results matching ""

    No results matching ""