{"__symbolic":"module","version":4,"metadata":{"HealthCheckComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"vdr-health-check","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":7,"character":21},"member":"OnPush"},"template":"<vdr-action-bar>\r\n    <vdr-ab-left>\r\n        <div class=\"system-status-header\" *ngIf=\"healthCheckService.status$ | async as status\">\r\n            <div class=\"status-icon\">\r\n                <clr-icon\r\n                    [attr.shape]=\"status === 'ok' ? 'check-circle' : 'exclamation-circle'\"\r\n                    [ngClass]=\"{ 'is-success': status === 'ok', 'is-danger': status !== 'ok' }\"\r\n                    size=\"48\"\r\n                ></clr-icon>\r\n            </div>\r\n            <div class=\"status-detail\">\r\n                <ng-container *ngIf=\"status === 'ok'; else error\">\r\n                    {{ 'system.health-all-systems-up' | translate }}\r\n                </ng-container>\r\n                <ng-template #error>\r\n                    {{ 'system.health-error' | translate }}\r\n                </ng-template>\r\n                <div class=\"last-checked\">\r\n                    {{ 'system.health-last-checked' | translate }}:\r\n                    {{ healthCheckService.lastCheck$ | async | localeDate: 'mediumTime' }}\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </vdr-ab-left>\r\n    <vdr-ab-right>\r\n        <vdr-action-bar-items locationId=\"system-status\"></vdr-action-bar-items>\r\n        <button class=\"btn btn-secondary\" (click)=\"healthCheckService.refresh()\">\r\n            <clr-icon shape=\"refresh\"></clr-icon> {{ 'system.health-refresh' | translate }}\r\n        </button>\r\n    </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<table class=\"table\">\r\n    <thead>\r\n        <tr>\r\n            <th class=\"left\">\r\n                {{ 'common.name' | translate }}\r\n            </th>\r\n            <th class=\"left\">\r\n                {{ 'system.health-status' | translate }}\r\n            </th>\r\n            <th class=\"left\">\r\n                {{ 'system.health-message' | translate }}\r\n            </th>\r\n        </tr>\r\n    </thead>\r\n    <tbody>\r\n        <tr *ngFor=\"let row of healthCheckService.details$ | async\">\r\n            <td class=\"align-middle left\">{{ row.key }}</td>\r\n            <td class=\"align-middle left\">\r\n                <vdr-chip [colorType]=\"row.result.status === 'up' ? 'success' : 'error'\">\r\n                    <ng-container *ngIf=\"row.result.status === 'up'; else down\">\r\n                        <clr-icon shape=\"check-circle\"></clr-icon>\r\n                        {{ 'system.health-status-up' | translate }}\r\n                    </ng-container>\r\n                    <ng-template #down>\r\n                        <clr-icon shape=\"exclamation-circle\"></clr-icon>\r\n                        {{ 'system.health-status-down' | translate }}\r\n                    </ng-template>\r\n                </vdr-chip>\r\n            </td>\r\n            <td class=\"align-middle left\">{{ row.result.message }}</td>\r\n        </tr>\r\n    </tbody>\r\n</table>\r\n","styles":[".system-status-header{display:flex;justify-content:space-between;align-items:flex-start}.system-status-header .status-detail{font-weight:700}.system-status-header .last-checked{font-weight:400;color:var(--color-grey-500)}"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"HealthCheckService","line":10,"character":43}]}]}},"JobListComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"BaseListComponent","line":23,"character":12},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":16,"character":1},"arguments":[{"selector":"vdr-job-list","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":20,"character":21},"member":"OnPush"},"template":"<vdr-action-bar>\r\n    <vdr-ab-left>\r\n        <clr-checkbox-container>\r\n            <clr-checkbox-wrapper>\r\n                <input type=\"checkbox\" clrCheckbox [formControl]=\"liveUpdate\" name=\"live-update\"/>\r\n                <label>{{ 'common.live-update' | translate }}</label>\r\n            </clr-checkbox-wrapper>\r\n            <clr-checkbox-wrapper>\r\n                <input\r\n                    type=\"checkbox\"\r\n                    clrCheckbox\r\n                    [formControl]=\"hideSettled\"\r\n                    name=\"hide-settled\"\r\n                    (change)=\"refresh()\"\r\n                />\r\n                <label>{{ 'system.hide-settled-jobs' | translate }}</label>\r\n            </clr-checkbox-wrapper>\r\n        </clr-checkbox-container>\r\n    </vdr-ab-left>\r\n    <vdr-ab-right>\r\n        <ng-select\r\n            [addTag]=\"false\"\r\n            [items]=\"queues$ | async\"\r\n            [hideSelected]=\"true\"\r\n            [multiple]=\"false\"\r\n            [markFirst]=\"false\"\r\n            [clearable]=\"false\"\r\n            [searchable]=\"false\"\r\n            bindValue=\"name\"\r\n            [formControl]=\"queueFilter\"\r\n            (change)=\"refresh()\"\r\n        >\r\n            <ng-template ng-label-tmp ng-option-tmp let-item=\"item\">\r\n                <ng-container *ngIf=\"item.name === 'all'; else others\">\r\n                    {{ 'system.all-job-queues' | translate }}\r\n                </ng-container>\r\n                <ng-template #others>\r\n                    <vdr-chip [colorFrom]=\"item.name\">{{ item.name }}</vdr-chip>\r\n                </ng-template>\r\n            </ng-template>\r\n        </ng-select>\r\n        <vdr-action-bar-items locationId=\"job-list\"></vdr-action-bar-items>\r\n    </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n    [items]=\"items$ | async\"\r\n    [itemsPerPage]=\"itemsPerPage$ | async\"\r\n    [totalItems]=\"totalItems$ | async\"\r\n    [currentPage]=\"currentPage$ | async\"\r\n    (pageChange)=\"setPageNumber($event)\"\r\n    (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n    <vdr-dt-column></vdr-dt-column>\r\n    <vdr-dt-column>{{ 'system.job-queue-name' | translate }}</vdr-dt-column>\r\n    <vdr-dt-column>{{ 'common.created-at' | translate }}</vdr-dt-column>\r\n    <vdr-dt-column>{{ 'system.job-state' | translate }}</vdr-dt-column>\r\n    <vdr-dt-column>{{ 'system.job-duration' | translate }}</vdr-dt-column>\r\n    <vdr-dt-column>{{ 'system.job-result' | translate }}</vdr-dt-column>\r\n    <vdr-dt-column></vdr-dt-column>\r\n    <ng-template let-job=\"item\">\r\n        <td class=\"left align-middle\">\r\n            <vdr-entity-info [entity]=\"job\"></vdr-entity-info>\r\n        </td>\r\n        <td class=\"left align-middle\">\r\n            <vdr-dropdown *ngIf=\"job.data\">\r\n                <button\r\n                    class=\"btn btn-link btn-icon\"\r\n                    vdrDropdownTrigger\r\n                    [title]=\"'system.job-data' | translate\"\r\n                >\r\n                    <clr-icon shape=\"details\"></clr-icon>\r\n                </button>\r\n                <vdr-dropdown-menu>\r\n                    <div class=\"result-detail\">\r\n                        <vdr-object-tree [value]=\"job.data\"></vdr-object-tree>\r\n                    </div>\r\n                </vdr-dropdown-menu>\r\n            </vdr-dropdown>\r\n            <vdr-chip [colorFrom]=\"job.queueName\">{{ job.queueName }}</vdr-chip>\r\n        </td>\r\n\r\n        <td class=\"left align-middle\">{{ job.createdAt | timeAgo }}</td>\r\n        <td class=\"left align-middle\">\r\n            <vdr-job-state-label [job]=\"job\"></vdr-job-state-label>\r\n        </td>\r\n        <td class=\"left align-middle\">{{ job.duration | duration }}</td>\r\n        <td class=\"left align-middle\">\r\n            <vdr-dropdown *ngIf=\"hasResult(job)\">\r\n                <button class=\"btn btn-link btn-sm details-button\" vdrDropdownTrigger>\r\n                    <clr-icon shape=\"details\"></clr-icon>\r\n                    {{ 'system.job-result' | translate }}\r\n                </button>\r\n                <vdr-dropdown-menu>\r\n                    <div class=\"result-detail\">\r\n                        <vdr-object-tree [value]=\"job.result\"></vdr-object-tree>\r\n                    </div>\r\n                </vdr-dropdown-menu>\r\n            </vdr-dropdown>\r\n            <vdr-dropdown *ngIf=\"job.error\">\r\n                <button class=\"btn btn-link btn-sm details-button\" vdrDropdownTrigger>\r\n                    <clr-icon shape=\"exclamation-circle\"></clr-icon>\r\n                    {{ 'system.job-error' | translate }}\r\n                </button>\r\n                <vdr-dropdown-menu>\r\n                    <div class=\"result-detail\">\r\n                        {{ job.error }}\r\n                    </div>\r\n                </vdr-dropdown-menu>\r\n            </vdr-dropdown>\r\n        </td>\r\n        <td class=\"right align-middle\">\r\n            <vdr-dropdown *ngIf=\"!job.isSettled && job.state !== 'FAILED'\">\r\n                <button class=\"icon-button\" vdrDropdownTrigger>\r\n                    <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n                </button>\r\n                <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n                    <button\r\n                        type=\"button\"\r\n                        class=\"delete-button\"\r\n                        (click)=\"cancelJob(job.id)\"\r\n                        [disabled]=\"!(['DeleteSettings', 'DeleteSystem'] | hasPermission)\"\r\n                        vdrDropdownItem\r\n                    >\r\n                        <clr-icon shape=\"ban\" class=\"is-danger\"></clr-icon>\r\n                        {{ 'common.cancel' | translate }}\r\n                    </button>\r\n                </vdr-dropdown-menu>\r\n            </vdr-dropdown>\r\n        </td>\r\n    </ng-template>\r\n</vdr-data-table>\r\n","styles":[".result-detail{margin:0 12px}"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"DataService","line":31,"character":29},{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"ModalService","line":32,"character":30},{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"NotificationService","line":33,"character":37},{"__symbolic":"reference","module":"@angular/router","name":"Router","line":34,"character":16},{"__symbolic":"reference","module":"@angular/router","name":"ActivatedRoute","line":35,"character":15}]}],"ngOnInit":[{"__symbolic":"method"}],"hasResult":[{"__symbolic":"method"}],"cancelJob":[{"__symbolic":"method"}]}},"JobStateLabelComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"vdr-job-state-label","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":7,"character":21},"member":"OnPush"},"template":"<vdr-chip [colorType]=\"colorType\">\r\n    <clr-icon [attr.shape]=\"iconShape\"></clr-icon>\r\n    {{ job.state | titlecase }}\r\n    <span *ngIf=\"job.state === 'RUNNING'\" class=\"progress\">\r\n        {{ (job.progress / 100) | percent }}\r\n    </span>\r\n</vdr-chip>\r\n","styles":[".progress{margin-left:3px}clr-icon{min-width:12px}"]}]}],"members":{"job":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":5}}]}]}},"SystemModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"HealthCheckComponent"},{"__symbolic":"reference","name":"JobListComponent"},{"__symbolic":"reference","name":"JobStateLabelComponent"}],"imports":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"SharedModule","line":12,"character":14},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/router","name":"RouterModule","line":12,"character":28},"member":"forChild"},"arguments":[{"__symbolic":"reference","name":"systemRoutes"}]}]}]}],"members":{}},"systemRoutes":[{"path":"jobs","component":{"__symbolic":"reference","name":"JobListComponent"},"data":{"breadcrumb":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@biesbjerg/ngx-translate-extract-marker","name":"marker","line":11,"character":24},"arguments":["breadcrumb.job-queue"]}}},{"path":"system-status","component":{"__symbolic":"reference","name":"HealthCheckComponent"},"data":{"breadcrumb":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@biesbjerg/ngx-translate-extract-marker","name":"marker","line":18,"character":24},"arguments":["breadcrumb.system-status"]}}}]},"origins":{"HealthCheckComponent":"./components/health-check/health-check.component","JobListComponent":"./components/job-list/job-list.component","JobStateLabelComponent":"./components/job-state-label/job-state-label.component","SystemModule":"./system.module","systemRoutes":"./system.routes"},"importAs":"@ishop/admin-ui/system"}