@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
1 lines • 12.2 kB
Source Map (JSON)
{"version":3,"file":"c8y-ngx-components-static-assets.mjs","sources":["../../static-assets/static-assets-modal.service.ts","../../static-assets/static-assets-file-picker/static-assets-file-picker.component.ts","../../static-assets/static-assets-file-picker/static-assets-file-picker.component.html","../../static-assets/c8y-ngx-components-static-assets.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport type { StaticAsset } from '@c8y/ngx-components/static-assets/data';\nimport type { StaticAssetsModalComponent } from '@c8y/ngx-components/static-assets/modal';\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\n@Injectable({ providedIn: 'root' })\nexport class StaticAssetsModalService {\n constructor(private modal: BsModalService) {}\n\n async pickStaticAsset(\n options?: Partial<\n Pick<StaticAssetsModalComponent, 'supportedFileExtensions' | 'assetType' | 'layout'>\n >\n ): Promise<StaticAsset> {\n const component = await import('@c8y/ngx-components/static-assets/modal').then(\n m => m.StaticAssetsModalComponent\n );\n const initialState: Partial<StaticAssetsModalComponent> = options || {};\n const modalRef = this.modal.show(component, {\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true,\n initialState,\n keyboard: false\n });\n return modalRef.content.result;\n }\n}\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StaticAssetsModalService } from '../static-assets-modal.service';\nimport { StaticAsset, StaticAssetsService } from '@c8y/ngx-components/static-assets/data';\nimport { CoreModule } from '@c8y/ngx-components';\nimport type { StaticAssetsModalComponent } from '@c8y/ngx-components/static-assets/modal';\n\n@Component({\n selector: 'c8y-static-assets-file-picker',\n templateUrl: './static-assets-file-picker.component.html',\n standalone: true,\n imports: [CoreModule, TooltipModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => StaticAssetsFilePickerComponent),\n multi: true\n }\n ]\n})\nexport class StaticAssetsFilePickerComponent implements ControlValueAccessor {\n @Input() isCSSURL = false;\n @Input() staticAssetType: StaticAssetsModalComponent['assetType'] = 'branding';\n @Input() supportedFileExtensions: StaticAssetsModalComponent['supportedFileExtensions'] = [];\n @Input() layout: StaticAssetsModalComponent['layout'] = 'grid';\n @Input() size = 48;\n loading = false;\n currentFile: StaticAsset | undefined = undefined;\n currentValue: string;\n\n private onChange: (value: string) => void;\n private onTouched: () => void;\n\n constructor(\n private staticAssetsModal: StaticAssetsModalService,\n private staticAssets: StaticAssetsService\n ) {}\n\n writeValue(value: string): void {\n if (/^url\\('.*'\\)$/.test(value)) {\n value = value.replace(/^url\\('/, '').replace(/'\\)$/, '');\n }\n if (/^url\\(.*\\)$/.test(value)) {\n value = value.replace(/^url\\(/, '').replace(/\\)$/, '');\n }\n this.currentValue = value;\n this.loadFileDetails(value);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n async loadFileDetails(currentUrl: string) {\n if (!currentUrl) {\n this.currentFile = undefined;\n return;\n }\n this.loading = true;\n try {\n const fileList = await this.staticAssets.listFilesCached(this.staticAssetType);\n const foundFile = fileList.find(file => currentUrl.includes(file.path));\n this.currentFile = foundFile;\n if (!foundFile) {\n const filePresent = await this.ensureFileExists(currentUrl);\n if (filePresent) {\n this.currentFile = {\n path: currentUrl,\n fileName: currentUrl.split('/').pop(),\n originalFileName: currentUrl.split('/').pop()\n } as any;\n }\n }\n } catch (e) {}\n\n this.loading = false;\n }\n\n clear() {\n this.onChange('');\n this.currentFile = undefined;\n this.currentValue = '';\n this.onTouched();\n }\n\n async openFilePicker() {\n try {\n const res = await this.staticAssetsModal.pickStaticAsset({\n layout: this.layout,\n assetType: this.staticAssetType,\n supportedFileExtensions: this.supportedFileExtensions\n });\n const value = this.isCSSURL ? `url(${res.path})` : res.path;\n this.onChange(value);\n this.currentFile = res;\n this.currentValue = value;\n this.onTouched();\n } catch (e) {\n // modal closed\n }\n }\n\n private async ensureFileExists(url: string): Promise<boolean> {\n const response = await fetch(url);\n return response.status === 200;\n }\n}\n","\n<div class=\"d-flex a-i-center gap-8\">\n <div *ngIf=\"!currentValue else fileSelected\" class=\"d-contents\">\n <i c8yIcon=\"no-image\" class=\"icon-48 text-muted\"></i>\n <p class=\"m-r-auto text-muted\"><em translate>No file selected.</em></p>\n </div>\n\n <ng-template #fileSelected>\n <c8y-loading *ngIf=\"loading\"></c8y-loading>\n <div *ngIf=\"!loading && !currentFile\">\n <p translate>Unable to locate file: \"{{ currentValue }}\"</p>\n </div>\n\n <div *ngIf=\"!loading && currentFile\" style=\"min-height: 48px\" class=\"d-flex a-i-center\">\n <img *ngIf=\"currentFile\" [src]=\"currentFile.path\" class=\"img-responsive\" [ngStyle]=\"{'width.px': size}\" alt=\"{{currentFile?.fileName }}\">\n </div>\n <span class=\"text-truncate\" title=\"{{ currentFile?.fileName || currentValue }}\">{{ currentFile?.fileName || currentValue }}</span>\n <button class=\" m-l-auto btn btn-dot btn-dot--danger\"\n type=\"button\" (click)=\"clear()\"\n [delay]=\"500\"\n [attr.aria-label]=\"'Remove' | translate\"\n placement=\"top\"\n tooltip=\"{{'Remove' | translate}}\">\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </ng-template>\n\n <button (click)=\"openFilePicker()\" class=\"btn btn-default btn-sm\">\n <span *ngIf=\"!currentFile\">\n {{'Select' | translate}}\n </span>\n <span *ngIf=\"currentFile\">\n {{'Replace' | translate}}\n </span>\n </button>\n</div>\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.StaticAssetsModalService"],"mappings":"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"}