@vendure/admin-ui 1.9.4 → 1.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/vendure-admin-ui-catalog.umd.js +93 -45
- package/bundles/vendure-admin-ui-catalog.umd.js.map +1 -1
- package/bundles/vendure-admin-ui-core.umd.js +1 -1
- package/bundles/vendure-admin-ui-core.umd.js.map +1 -1
- package/bundles/vendure-admin-ui-login.umd.js +1 -1
- package/bundles/vendure-admin-ui-login.umd.js.map +1 -1
- package/bundles/vendure-admin-ui-settings.umd.js +43 -3
- package/bundles/vendure-admin-ui-settings.umd.js.map +1 -1
- package/catalog/components/product-options-editor/product-options-editor.component.d.ts +5 -2
- package/catalog/vendure-admin-ui-catalog.metadata.json +1 -1
- package/core/common/version.d.ts +1 -1
- package/core/vendure-admin-ui-core.metadata.json +1 -1
- package/esm2015/catalog/components/product-options-editor/product-options-editor.component.js +74 -29
- package/esm2015/core/common/version.js +2 -2
- package/esm2015/core/shared/components/dropdown/dropdown.component.js +1 -1
- package/esm2015/login/components/login/login.component.js +2 -2
- package/esm2015/settings/components/administrator-list/administrator-list.component.js +47 -7
- package/fesm2015/vendure-admin-ui-catalog.js +73 -28
- package/fesm2015/vendure-admin-ui-catalog.js.map +1 -1
- package/fesm2015/vendure-admin-ui-core.js +1 -1
- package/fesm2015/vendure-admin-ui-core.js.map +1 -1
- package/fesm2015/vendure-admin-ui-login.js +1 -1
- package/fesm2015/vendure-admin-ui-login.js.map +1 -1
- package/fesm2015/vendure-admin-ui-settings.js +45 -6
- package/fesm2015/vendure-admin-ui-settings.js.map +1 -1
- package/login/vendure-admin-ui-login.metadata.json +1 -1
- package/package.json +2 -2
- package/settings/components/administrator-list/administrator-list.component.d.ts +17 -2
- package/settings/vendure-admin-ui-settings.metadata.json +1 -1
- package/static/i18n-messages/cs.json +3 -2
- package/static/i18n-messages/de.json +4 -3
- package/static/i18n-messages/en.json +3 -2
- package/static/i18n-messages/es.json +3 -2
- package/static/i18n-messages/fr.json +3 -2
- package/static/i18n-messages/it.json +3 -2
- package/static/i18n-messages/pl.json +3 -2
- package/static/i18n-messages/pt_BR.json +3 -2
- package/static/i18n-messages/pt_PT.json +3 -2
- package/static/i18n-messages/ru.json +3 -2
- package/static/i18n-messages/uk.json +3 -2
- package/static/i18n-messages/zh_Hans.json +3 -2
- package/static/i18n-messages/zh_Hant.json +3 -2
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
LoginComponent.decorators = [
|
|
111
111
|
{ type: i0.Component, args: [{
|
|
112
112
|
selector: 'vdr-login',
|
|
113
|
-
template: "<div class=\"login-wrapper\">\r\n <div class=\"login-wrapper-inner\">\r\n <div class=\"login-wrapper-image\">\r\n <div class=\"login-wrapper-image-content\">\r\n <div class=\"login-wrapper-image-title\">\r\n {{ 'common.login-image-title' | translate }}\r\n </div>\r\n <div class=\"login-wrapper-image-copyright\">\r\n <p *ngIf=\"imageCreator\" class=\"creator\">Photo by <a [href]=\"imageCreatorUrl\" target=\"_blank\">{{ imageCreator }}</a> on <a [href]=\"imageUnsplashUrl\" target=\"_blank\">Unsplash</a></p>\r\n <p *ngIf=\"imageLocation\" class=\"location\">{{ imageLocation }}</p>\r\n </div>\r\n </div>\r\n <img *ngIf=\"imageUrl\" [src]=\"imageUrl\" [alt]=\"imageUrl\">\r\n </div>\r\n <div class=\"login-wrapper-form\">\r\n <p class=\"login-title\">\r\n {{ 'common.login-title' | translate }}\r\n </p>\r\n <form class=\"login-form\">\r\n <div class=\"login-group\">\r\n <input\r\n class=\"username\"\r\n type=\"text\"\r\n name=\"username\"\r\n id=\"login_username\"\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"'common.username' | translate\"\r\n />\r\n <input\r\n class=\"password\"\r\n name=\"password\"\r\n type=\"password\"\r\n id=\"login_password\"\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"'common.password' | translate\"\r\n />\r\n <clr-alert [clrAlertType]=\"'danger'\" [clrAlertClosable]=\"false\" [class.visible]=\"errorMessage\" class=\"login-error\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ errorMessage }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n id=\"rememberme\"\r\n name=\"rememberme\"\r\n [(ngModel)]=\"rememberMe\"\r\n />\r\n <label>{{ 'common.remember-me' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <button\r\n type=\"submit\"\r\n class=\"btn btn-primary\"\r\n (click)=\"logIn()\"\r\n [disabled]=\"!username || !password\"\r\n >\r\n {{ 'common.login' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"version\">\r\n <span *ngIf=\"brand\">{{ brand }} <span *ngIf=\"!hideVendureBranding || !hideVersion\">-</span></span>\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n <span *ngIf=\"!hideVersion\">v{{ version }}</span>\r\n </div>\r\n </form>\r\n </div>\r\n <img class=\"login-wrapper-logo\" src=\"assets/logo-300px.png\" />\r\n </div>\r\n</div>\r\n",
|
|
113
|
+
template: "<div class=\"login-wrapper\">\r\n <div class=\"login-wrapper-inner\">\r\n <div class=\"login-wrapper-image\">\r\n <div class=\"login-wrapper-image-content\">\r\n <div class=\"login-wrapper-image-title\">\r\n {{ 'common.login-image-title' | translate }}\r\n </div>\r\n <div class=\"login-wrapper-image-copyright\">\r\n <p *ngIf=\"imageCreator\" class=\"creator\">Photo by <a [href]=\"imageCreatorUrl\" target=\"_blank\">{{ imageCreator }}</a> on <a [href]=\"imageUnsplashUrl\" target=\"_blank\">Unsplash</a></p>\r\n <p *ngIf=\"imageLocation\" class=\"location\">{{ imageLocation }}</p>\r\n </div>\r\n </div>\r\n <img *ngIf=\"imageUrl\" [src]=\"imageUrl\" [alt]=\"imageUrl\">\r\n </div>\r\n <div class=\"login-wrapper-form\">\r\n <p class=\"login-title\">\r\n {{ 'common.login-title' | translate: { brand: hideVendureBranding ? brand : \"Vendure\" } }}\r\n </p>\r\n <form class=\"login-form\">\r\n <div class=\"login-group\">\r\n <input\r\n class=\"username\"\r\n type=\"text\"\r\n name=\"username\"\r\n id=\"login_username\"\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"'common.username' | translate\"\r\n />\r\n <input\r\n class=\"password\"\r\n name=\"password\"\r\n type=\"password\"\r\n id=\"login_password\"\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"'common.password' | translate\"\r\n />\r\n <clr-alert [clrAlertType]=\"'danger'\" [clrAlertClosable]=\"false\" [class.visible]=\"errorMessage\" class=\"login-error\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ errorMessage }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n id=\"rememberme\"\r\n name=\"rememberme\"\r\n [(ngModel)]=\"rememberMe\"\r\n />\r\n <label>{{ 'common.remember-me' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <button\r\n type=\"submit\"\r\n class=\"btn btn-primary\"\r\n (click)=\"logIn()\"\r\n [disabled]=\"!username || !password\"\r\n >\r\n {{ 'common.login' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"version\">\r\n <span *ngIf=\"brand\">{{ brand }} <span *ngIf=\"!hideVendureBranding || !hideVersion\">-</span></span>\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n <span *ngIf=\"!hideVersion\">v{{ version }}</span>\r\n </div>\r\n </form>\r\n </div>\r\n <img class=\"login-wrapper-logo\" src=\"assets/logo-300px.png\" />\r\n </div>\r\n</div>\r\n",
|
|
114
114
|
styles: [".login-wrapper{background:#f0f2f5;background-image:none;height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-wrapper .login-wrapper-inner{background:#fff;width:1120px;height:590px;display:flex;justify-content:flex-start;align-items:stretch;position:relative;border-radius:3px;overflow:hidden}@media (max-width: 992px){.login-wrapper .login-wrapper-inner{flex-direction:column;height:auto;width:100%}}.login-wrapper .login-wrapper-inner .login-wrapper-image{height:100%;flex-grow:1;position:relative}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-image{height:300px}}.login-wrapper .login-wrapper-inner .login-wrapper-image img{display:block;width:100%;height:100%;object-fit:cover;object-position:center;position:relative;z-index:1}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content{width:100%;height:100%;position:absolute;left:0;bottom:0;z-index:10;background:#020024;background:linear-gradient(180deg,rgba(2,0,36,0) 0%,rgba(0,0,0,.75) 100%);display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;padding:30px}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-title{font-size:1.6rem;font-weight:bold;color:#fff;margin-bottom:20px}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-title{font-size:1.2rem}}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright{opacity:.8}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright p{font-size:.6rem;color:#fff;margin:0!important}.login-wrapper .login-wrapper-inner .login-wrapper-image .login-wrapper-image-content .login-wrapper-image-copyright a{color:#fff;text-decoration:underline}.login-wrapper .login-wrapper-inner .login-wrapper-form{height:100%;width:400px;padding:40px;display:flex;flex-direction:column;align-items:stretch;justify-content:center;box-shadow:0 20px 25px #0000001a;overflow:hidden;border-radius:5px;flex-shrink:0}@media (max-width: 992px){.login-wrapper .login-wrapper-inner .login-wrapper-form{height:auto;width:100%;padding:20px}}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-title{font-weight:bold;font-size:1.2rem;margin-bottom:20px;color:#afafaf}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group input.username,.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group input.password{display:block;width:100%;margin-bottom:15px;padding:12px 16px!important;background:#fff;font-size:14px;line-height:22px;color:#52667a;outline:none;-webkit-appearance:none}.login-wrapper .login-wrapper-inner .login-wrapper-form .login-group .btn{width:100%!important;margin-top:20px!important}.login-wrapper .login-wrapper-inner .login-wrapper-logo{width:60px;height:auto;position:absolute;right:20px;top:20px}.version{flex:1;flex-grow:1;display:flex;align-items:flex-end;justify-content:center;color:var(--color-grey-300)}.version span+span{margin-left:5px}.login-error{max-height:0;overflow:hidden}.login-error.visible{max-height:46px;transition:max-height .2s;animation:shake .82s cubic-bezier(.36,.07,.19,.97) both;animation-delay:.2s;transform:translate(0);-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}@keyframes shake{10%,90%{transform:translate(-1px)}20%,80%{transform:translate(2px)}30%,50%,70%{transform:translate(-4px)}40%,60%{transform:translate(4px)}}\n"]
|
|
115
115
|
},] }
|
|
116
116
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vendure-admin-ui-login.umd.js","sources":["../../src/lib/login/src/components/login/login.component.ts","../../src/lib/login/src/providers/login.guard.ts","../../src/lib/login/src/login.routes.ts","../../src/lib/login/src/login.module.ts","../../src/lib/login/src/public_api.ts","../../src/lib/login/src/vendure-admin-ui-login.ts"],"sourcesContent":["import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Component } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ADMIN_UI_VERSION, AuthService, AUTH_REDIRECT_PARAM, getAppConfig } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.scss'],\r\n})\r\nexport class LoginComponent {\r\n username = '';\r\n password = '';\r\n rememberMe = false;\r\n version = ADMIN_UI_VERSION;\r\n errorMessage: string | undefined;\r\n brand = getAppConfig().brand;\r\n hideVendureBranding = getAppConfig().hideVendureBranding;\r\n hideVersion = getAppConfig().hideVersion;\r\n customImageUrl = getAppConfig().loginImageUrl;\r\n imageUrl = '';\r\n imageUnsplashUrl = '';\r\n imageLocation = '';\r\n imageCreator = '';\r\n imageCreatorUrl = '';\r\n\r\n constructor(private authService: AuthService, private router: Router, private httpClient: HttpClient) {\r\n if (this.customImageUrl) {\r\n this.imageUrl = this.customImageUrl;\r\n } else {\r\n this.loadImage();\r\n }\r\n }\r\n\r\n logIn(): void {\r\n this.errorMessage = undefined;\r\n this.authService.logIn(this.username, this.password, this.rememberMe).subscribe(result => {\r\n switch (result.__typename) {\r\n case 'CurrentUser':\r\n const redirect = this.getRedirectRoute();\r\n this.router.navigateByUrl(redirect ? redirect : '/');\r\n break;\r\n case 'InvalidCredentialsError':\r\n case 'NativeAuthStrategyError':\r\n this.errorMessage = result.message;\r\n break;\r\n }\r\n });\r\n }\r\n\r\n loadImage() {\r\n this.httpClient\r\n .get('https://login-image.vendure.io')\r\n .toPromise()\r\n .then(res => {\r\n this.updateImage(res);\r\n });\r\n }\r\n\r\n updateImage(res: any) {\r\n const user: any = (res as any).user;\r\n const location: any = (res as any).location;\r\n\r\n this.imageUrl = res.urls.regular + '?utm_source=Vendure+Login+Image&utm_medium=referral';\r\n this.imageCreator = user.name;\r\n this.imageLocation = location.name;\r\n this.imageCreatorUrl = user.links.html + '?utm_source=Vendure+Login+Image&utm_medium=referral';\r\n this.imageUnsplashUrl = res.links.html;\r\n }\r\n\r\n /**\r\n * Attempts to read a redirect param from the current url and parse it into a\r\n * route from which the user was redirected after a 401 error.\r\n */\r\n private getRedirectRoute(): string | undefined {\r\n let redirectTo: string | undefined;\r\n const re = new RegExp(`${AUTH_REDIRECT_PARAM}=(.*)`);\r\n try {\r\n const redirectToParam = window.location.search.match(re);\r\n if (redirectToParam && 1 < redirectToParam.length) {\r\n redirectTo = atob(decodeURIComponent(redirectToParam[1]));\r\n }\r\n } catch (e) {\r\n // ignore\r\n }\r\n return redirectTo;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';\r\nimport { AuthService } from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n/**\r\n * This guard prevents loggen-in users from navigating to the login screen.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LoginGuard implements CanActivate {\r\n constructor(private router: Router, private authService: AuthService) {}\r\n\r\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {\r\n return this.authService.checkAuthenticatedStatus().pipe(\r\n map(authenticated => {\r\n if (authenticated) {\r\n this.router.navigate(['/']);\r\n }\r\n return !authenticated;\r\n }),\r\n );\r\n }\r\n}\r\n","import { Routes } from '@angular/router';\r\n\r\nimport { LoginComponent } from './components/login/login.component';\r\nimport { LoginGuard } from './providers/login.guard';\r\n\r\nexport const loginRoutes: Routes = [\r\n {\r\n path: '',\r\n component: LoginComponent,\r\n pathMatch: 'full',\r\n canActivate: [LoginGuard],\r\n },\r\n];\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SharedModule } from '@vendure/admin-ui/core';\r\n\r\nimport { LoginComponent } from './components/login/login.component';\r\nimport { loginRoutes } from './login.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild(loginRoutes)],\r\n exports: [],\r\n declarations: [LoginComponent],\r\n})\r\nexport class LoginModule {}\r\n","// This file was generated by the build-public-api.ts script\nexport * from './components/login/login.component';\nexport * from './login.module';\nexport * from './login.routes';\nexport * from './providers/login.guard';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ADMIN_UI_VERSION","getAppConfig","AUTH_REDIRECT_PARAM","Component","AuthService","Router","HttpClient","map","Injectable","NgModule","SharedModule","RouterModule"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"vendure-admin-ui-login.umd.js","sources":["../../src/lib/login/src/components/login/login.component.ts","../../src/lib/login/src/providers/login.guard.ts","../../src/lib/login/src/login.routes.ts","../../src/lib/login/src/login.module.ts","../../src/lib/login/src/public_api.ts","../../src/lib/login/src/vendure-admin-ui-login.ts"],"sourcesContent":["import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Component } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ADMIN_UI_VERSION, AuthService, AUTH_REDIRECT_PARAM, getAppConfig } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.scss'],\r\n})\r\nexport class LoginComponent {\r\n username = '';\r\n password = '';\r\n rememberMe = false;\r\n version = ADMIN_UI_VERSION;\r\n errorMessage: string | undefined;\r\n brand = getAppConfig().brand;\r\n hideVendureBranding = getAppConfig().hideVendureBranding;\r\n hideVersion = getAppConfig().hideVersion;\r\n customImageUrl = getAppConfig().loginImageUrl;\r\n imageUrl = '';\r\n imageUnsplashUrl = '';\r\n imageLocation = '';\r\n imageCreator = '';\r\n imageCreatorUrl = '';\r\n\r\n constructor(private authService: AuthService, private router: Router, private httpClient: HttpClient) {\r\n if (this.customImageUrl) {\r\n this.imageUrl = this.customImageUrl;\r\n } else {\r\n this.loadImage();\r\n }\r\n }\r\n\r\n logIn(): void {\r\n this.errorMessage = undefined;\r\n this.authService.logIn(this.username, this.password, this.rememberMe).subscribe(result => {\r\n switch (result.__typename) {\r\n case 'CurrentUser':\r\n const redirect = this.getRedirectRoute();\r\n this.router.navigateByUrl(redirect ? redirect : '/');\r\n break;\r\n case 'InvalidCredentialsError':\r\n case 'NativeAuthStrategyError':\r\n this.errorMessage = result.message;\r\n break;\r\n }\r\n });\r\n }\r\n\r\n loadImage() {\r\n this.httpClient\r\n .get('https://login-image.vendure.io')\r\n .toPromise()\r\n .then(res => {\r\n this.updateImage(res);\r\n });\r\n }\r\n\r\n updateImage(res: any) {\r\n const user: any = (res as any).user;\r\n const location: any = (res as any).location;\r\n\r\n this.imageUrl = res.urls.regular + '?utm_source=Vendure+Login+Image&utm_medium=referral';\r\n this.imageCreator = user.name;\r\n this.imageLocation = location.name;\r\n this.imageCreatorUrl = user.links.html + '?utm_source=Vendure+Login+Image&utm_medium=referral';\r\n this.imageUnsplashUrl = res.links.html;\r\n }\r\n\r\n /**\r\n * Attempts to read a redirect param from the current url and parse it into a\r\n * route from which the user was redirected after a 401 error.\r\n */\r\n private getRedirectRoute(): string | undefined {\r\n let redirectTo: string | undefined;\r\n const re = new RegExp(`${AUTH_REDIRECT_PARAM}=(.*)`);\r\n try {\r\n const redirectToParam = window.location.search.match(re);\r\n if (redirectToParam && 1 < redirectToParam.length) {\r\n redirectTo = atob(decodeURIComponent(redirectToParam[1]));\r\n }\r\n } catch (e) {\r\n // ignore\r\n }\r\n return redirectTo;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';\r\nimport { AuthService } from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n/**\r\n * This guard prevents loggen-in users from navigating to the login screen.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LoginGuard implements CanActivate {\r\n constructor(private router: Router, private authService: AuthService) {}\r\n\r\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {\r\n return this.authService.checkAuthenticatedStatus().pipe(\r\n map(authenticated => {\r\n if (authenticated) {\r\n this.router.navigate(['/']);\r\n }\r\n return !authenticated;\r\n }),\r\n );\r\n }\r\n}\r\n","import { Routes } from '@angular/router';\r\n\r\nimport { LoginComponent } from './components/login/login.component';\r\nimport { LoginGuard } from './providers/login.guard';\r\n\r\nexport const loginRoutes: Routes = [\r\n {\r\n path: '',\r\n component: LoginComponent,\r\n pathMatch: 'full',\r\n canActivate: [LoginGuard],\r\n },\r\n];\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SharedModule } from '@vendure/admin-ui/core';\r\n\r\nimport { LoginComponent } from './components/login/login.component';\r\nimport { loginRoutes } from './login.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild(loginRoutes)],\r\n exports: [],\r\n declarations: [LoginComponent],\r\n})\r\nexport class LoginModule {}\r\n","// This file was generated by the build-public-api.ts script\nexport * from './components/login/login.component';\nexport * from './login.module';\nexport * from './login.routes';\nexport * from './providers/login.guard';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ADMIN_UI_VERSION","getAppConfig","AUTH_REDIRECT_PARAM","Component","AuthService","Router","HttpClient","map","Injectable","NgModule","SharedModule","RouterModule"],"mappings":"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"}
|
|
@@ -636,6 +636,7 @@
|
|
|
636
636
|
_this.dataService = dataService;
|
|
637
637
|
_this.modalService = modalService;
|
|
638
638
|
_this.notificationService = notificationService;
|
|
639
|
+
_this.searchControl = new forms.FormControl('');
|
|
639
640
|
_super.prototype.setQueryFn.call(_this, function () {
|
|
640
641
|
var _a;
|
|
641
642
|
var args = [];
|
|
@@ -643,9 +644,19 @@
|
|
|
643
644
|
args[_i] = arguments[_i];
|
|
644
645
|
}
|
|
645
646
|
return (_a = _this.dataService.administrator).getAdministrators.apply(_a, __spreadArray([], __read(args)));
|
|
646
|
-
}, function (data) { return data.administrators; });
|
|
647
|
+
}, function (data) { return data.administrators; }, function (skip, take) { return _this.createSearchQuery(skip, take, _this.searchControl.value); });
|
|
647
648
|
return _this;
|
|
648
649
|
}
|
|
650
|
+
AdministratorListComponent.prototype.ngOnInit = function () {
|
|
651
|
+
var _this = this;
|
|
652
|
+
_super.prototype.ngOnInit.call(this);
|
|
653
|
+
var searchTerms$ = rxjs.merge(this.searchControl.valueChanges).pipe(operators.filter(function (value) { return 2 < value.length || value.length === 0; }), operators.debounceTime(250));
|
|
654
|
+
rxjs.merge(searchTerms$, this.route.queryParamMap)
|
|
655
|
+
.pipe(operators.takeUntil(this.destroy$))
|
|
656
|
+
.subscribe(function (val) {
|
|
657
|
+
_this.refresh();
|
|
658
|
+
});
|
|
659
|
+
};
|
|
649
660
|
AdministratorListComponent.prototype.deleteAdministrator = function (administrator) {
|
|
650
661
|
var _this = this;
|
|
651
662
|
return this.modalService
|
|
@@ -669,13 +680,42 @@
|
|
|
669
680
|
});
|
|
670
681
|
});
|
|
671
682
|
};
|
|
683
|
+
AdministratorListComponent.prototype.createSearchQuery = function (skip, take, searchTerm) {
|
|
684
|
+
var filter = {};
|
|
685
|
+
var filterOperator = i2.LogicalOperator.AND;
|
|
686
|
+
if (searchTerm) {
|
|
687
|
+
filter = {
|
|
688
|
+
emailAddress: {
|
|
689
|
+
contains: searchTerm,
|
|
690
|
+
},
|
|
691
|
+
firstName: {
|
|
692
|
+
contains: searchTerm,
|
|
693
|
+
},
|
|
694
|
+
lastName: {
|
|
695
|
+
contains: searchTerm,
|
|
696
|
+
},
|
|
697
|
+
};
|
|
698
|
+
filterOperator = i2.LogicalOperator.OR;
|
|
699
|
+
}
|
|
700
|
+
return {
|
|
701
|
+
options: {
|
|
702
|
+
skip: skip,
|
|
703
|
+
take: take,
|
|
704
|
+
filter: Object.assign({}, (filter !== null && filter !== void 0 ? filter : {})),
|
|
705
|
+
sort: {
|
|
706
|
+
updatedAt: i2.SortOrder.DESC,
|
|
707
|
+
},
|
|
708
|
+
filterOperator: filterOperator,
|
|
709
|
+
},
|
|
710
|
+
};
|
|
711
|
+
};
|
|
672
712
|
return AdministratorListComponent;
|
|
673
713
|
}(i2.BaseListComponent));
|
|
674
714
|
AdministratorListComponent.decorators = [
|
|
675
715
|
{ type: i0.Component, args: [{
|
|
676
716
|
selector: 'vdr-administrator-list',
|
|
677
|
-
template: "<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateAdministrator'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'admin.create-new-administrator' | translate }}\r\n </a>\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>{{ 'settings.first-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.last-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-administrator=\"item\">\r\n <td class=\"left align-middle\">{{ administrator.firstName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.lastName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', administrator.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></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)=\"deleteAdministrator(administrator)\"\r\n [disabled]=\"!('DeleteAdministrator' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | 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",
|
|
678
|
-
styles: [""]
|
|
717
|
+
template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"searchControl\"\r\n [placeholder]=\"'admin.search-administrator' | translate\"\r\n class=\"search-input\"\r\n />\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateAdministrator'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'admin.create-new-administrator' | translate }}\r\n </a>\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>{{ 'settings.first-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.last-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-administrator=\"item\">\r\n <td class=\"left align-middle\">{{ administrator.firstName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.lastName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', administrator.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></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)=\"deleteAdministrator(administrator)\"\r\n [disabled]=\"!('DeleteAdministrator' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | 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",
|
|
718
|
+
styles: [".search-input{min-width:300px}\n"]
|
|
679
719
|
},] }
|
|
680
720
|
];
|
|
681
721
|
AdministratorListComponent.ctorParameters = function () { return [
|