@rolatech/angular-user 20.2.6-beta.1 → 20.2.7-beta.2
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.
|
@@ -57,10 +57,10 @@ class AgentApplicationDetailComponent extends BaseComponent {
|
|
|
57
57
|
},
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
61
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
60
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgentApplicationDetailComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
61
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AgentApplicationDetailComponent, isStandalone: true, selector: "rolatech-agent-application-detail", usesInheritance: true, ngImport: i0, template: "<rolatech-container>\n <rolatech-toolbar title=\"My application\" large>\n <div class=\"text-lg font-bold\">\n {{ applicationStatus[application.status] }}\n </div>\n </rolatech-toolbar>\n\n <div>\n <hr class=\"my-3\" />\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Application details</div>\n <div class=\"flex overflow-x-scroll scrollbar-hide\">\n <div class=\"flex flex-col w-full\">\n <rolatech-rich-label label=\"FirstName\" [title]=\"application.firstName\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Email\" [title]=\"application.email\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Phone\" [title]=\"application.phone\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Business Name\" [title]=\"application.businessName\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Experience Years\" [title]=\"application.experienceYears\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Created At\" [title]=\"application.createdAt\"></rolatech-rich-label>\n </div>\n </div>\n <hr class=\"my-3\" />\n </div>\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Documents</div>\n @if (application.documents?.length > 0) {\n @for (item of application.documents; track $index) {\n <a class=\"underline underline-offset-4\" [href]=\"item\" target=\"_blank\">Document: {{ $index + 1 }}</a>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n </div>\n </div>\n</rolatech-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ContainerComponent, selector: "rolatech-container" }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: RichLabelComponent, selector: "rolatech-rich-label", inputs: ["label", "title"] }, { kind: "component", type: EmptyComponent, selector: "rolatech-empty" }] });
|
|
62
62
|
}
|
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgentApplicationDetailComponent, decorators: [{
|
|
64
64
|
type: Component,
|
|
65
65
|
args: [{ selector: 'rolatech-agent-application-detail', imports: [CommonModule, ContainerComponent, ToolbarComponent, RichLabelComponent, EmptyComponent], template: "<rolatech-container>\n <rolatech-toolbar title=\"My application\" large>\n <div class=\"text-lg font-bold\">\n {{ applicationStatus[application.status] }}\n </div>\n </rolatech-toolbar>\n\n <div>\n <hr class=\"my-3\" />\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Application details</div>\n <div class=\"flex overflow-x-scroll scrollbar-hide\">\n <div class=\"flex flex-col w-full\">\n <rolatech-rich-label label=\"FirstName\" [title]=\"application.firstName\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Email\" [title]=\"application.email\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Phone\" [title]=\"application.phone\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Business Name\" [title]=\"application.businessName\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Experience Years\" [title]=\"application.experienceYears\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Created At\" [title]=\"application.createdAt\"></rolatech-rich-label>\n </div>\n </div>\n <hr class=\"my-3\" />\n </div>\n <div>\n <div class=\"text-lg font-bold py-2\" i18n>Documents</div>\n @if (application.documents?.length > 0) {\n @for (item of application.documents; track $index) {\n <a class=\"underline underline-offset-4\" [href]=\"item\" target=\"_blank\">Document: {{ $index + 1 }}</a>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n </div>\n </div>\n</rolatech-container>\n" }]
|
|
66
66
|
}] });
|
|
@@ -119,10 +119,10 @@ class AgentApplicationComponent extends BaseComponent {
|
|
|
119
119
|
},
|
|
120
120
|
});
|
|
121
121
|
}
|
|
122
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
123
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
122
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgentApplicationComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
123
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AgentApplicationComponent, isStandalone: true, selector: "rolatech-agent-application", usesInheritance: true, ngImport: i0, template: "<section id=\"application\" class=\"p-10\">\n <h2 class=\"text-2xl font-semibold text-center mb-6\">Agent Application Form</h2>\n <form class=\"max-w-2xl mx-auto space-y-4\" (submit)=\"submitApplication()\">\n <mat-form-field class=\"w-full\">\n <mat-label>First Name</mat-label>\n <input matInput [(ngModel)]=\"application.firstName\" name=\"firstName\" required />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>Last Name</mat-label>\n <input matInput [(ngModel)]=\"application.lastName\" name=\"lastName\" required />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>Email Address</mat-label>\n <input matInput [(ngModel)]=\"application.email\" name=\"email\" type=\"email\" required />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>Phone Number</mat-label>\n <input matInput [(ngModel)]=\"application.phone\" name=\"phone\" type=\"tel\" required />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>Business Name</mat-label>\n <input matInput [(ngModel)]=\"application.businessName\" name=\"businessName\" required />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>WebSite</mat-label>\n <input matInput [(ngModel)]=\"application.website\" name=\"website\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>Experience Years</mat-label>\n <input matInput [(ngModel)]=\"application.experienceYears\" name=\"experienceYears\" required />\n </mat-form-field>\n\n <div>\n <div class=\"mb-2\">\n <div class=\"text-xl font-bold\" i18n>Upload Certification (PDF)</div>\n <div class=\"text-sm opacity-70\" i18n>Safeagent, UKALA, or Propertymark certification</div>\n </div>\n <input type=\"file\" (change)=\"onFileSelected($event)\" accept=\".pdf\" required />\n </div>\n\n <button mat-flat-button type=\"submit\" [disabled]=\"sending\">\n <span style=\"display: flex; align-items: center\">\n @if (sending) {\n <mat-progress-spinner diameter=\"20\" mode=\"indeterminate\" [style.marginRight.px]=\"8\"></mat-progress-spinner>\n }\n {{ sending ? 'Requesting...' : 'Submit Application' }}\n </span>\n </button>\n <!-- <button mat-flat-button type=\"submit\">Submit Application</button> -->\n </form>\n</section>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] });
|
|
124
124
|
}
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgentApplicationComponent, decorators: [{
|
|
126
126
|
type: Component,
|
|
127
127
|
args: [{ selector: 'rolatech-agent-application', imports: [CommonModule, MatFormFieldModule, MatInputModule, FormsModule, MatButtonModule, MatProgressSpinnerModule], template: "<section id=\"application\" class=\"p-10\">\n <h2 class=\"text-2xl font-semibold text-center mb-6\">Agent Application Form</h2>\n <form class=\"max-w-2xl mx-auto space-y-4\" (submit)=\"submitApplication()\">\n <mat-form-field class=\"w-full\">\n <mat-label>First Name</mat-label>\n <input matInput [(ngModel)]=\"application.firstName\" name=\"firstName\" required />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>Last Name</mat-label>\n <input matInput [(ngModel)]=\"application.lastName\" name=\"lastName\" required />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>Email Address</mat-label>\n <input matInput [(ngModel)]=\"application.email\" name=\"email\" type=\"email\" required />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>Phone Number</mat-label>\n <input matInput [(ngModel)]=\"application.phone\" name=\"phone\" type=\"tel\" required />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>Business Name</mat-label>\n <input matInput [(ngModel)]=\"application.businessName\" name=\"businessName\" required />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>WebSite</mat-label>\n <input matInput [(ngModel)]=\"application.website\" name=\"website\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-full\">\n <mat-label>Experience Years</mat-label>\n <input matInput [(ngModel)]=\"application.experienceYears\" name=\"experienceYears\" required />\n </mat-form-field>\n\n <div>\n <div class=\"mb-2\">\n <div class=\"text-xl font-bold\" i18n>Upload Certification (PDF)</div>\n <div class=\"text-sm opacity-70\" i18n>Safeagent, UKALA, or Propertymark certification</div>\n </div>\n <input type=\"file\" (change)=\"onFileSelected($event)\" accept=\".pdf\" required />\n </div>\n\n <button mat-flat-button type=\"submit\" [disabled]=\"sending\">\n <span style=\"display: flex; align-items: center\">\n @if (sending) {\n <mat-progress-spinner diameter=\"20\" mode=\"indeterminate\" [style.marginRight.px]=\"8\"></mat-progress-spinner>\n }\n {{ sending ? 'Requesting...' : 'Submit Application' }}\n </span>\n </button>\n <!-- <button mat-flat-button type=\"submit\">Submit Application</button> -->\n </form>\n</section>\n" }]
|
|
128
128
|
}] });
|
|
@@ -131,10 +131,10 @@ class UserNamePipe {
|
|
|
131
131
|
transform(user) {
|
|
132
132
|
return userDisplayName$1(user);
|
|
133
133
|
}
|
|
134
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
135
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.
|
|
134
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
135
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: UserNamePipe, isStandalone: true, name: "userName" });
|
|
136
136
|
}
|
|
137
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
137
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserNamePipe, decorators: [{
|
|
138
138
|
type: Pipe,
|
|
139
139
|
args: [{
|
|
140
140
|
name: 'userName',
|
|
@@ -146,10 +146,10 @@ class UserInitialsPipe {
|
|
|
146
146
|
transform(user) {
|
|
147
147
|
return userInitials$1(user);
|
|
148
148
|
}
|
|
149
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
150
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.
|
|
149
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserInitialsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
150
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: UserInitialsPipe, isStandalone: true, name: "userInitials" });
|
|
151
151
|
}
|
|
152
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
152
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserInitialsPipe, decorators: [{
|
|
153
153
|
type: Pipe,
|
|
154
154
|
args: [{
|
|
155
155
|
name: 'userInitials',
|
|
@@ -161,10 +161,10 @@ class UserAvatarPipe {
|
|
|
161
161
|
transform(user) {
|
|
162
162
|
return userAvatarUrl$1(user);
|
|
163
163
|
}
|
|
164
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
165
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.
|
|
164
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserAvatarPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
165
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: UserAvatarPipe, isStandalone: true, name: "userAvatar" });
|
|
166
166
|
}
|
|
167
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
167
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserAvatarPipe, decorators: [{
|
|
168
168
|
type: Pipe,
|
|
169
169
|
args: [{
|
|
170
170
|
name: 'userAvatar',
|
|
@@ -177,10 +177,10 @@ class UserSincePipe {
|
|
|
177
177
|
const d = parseUserDateTime$1(user?.createdAt);
|
|
178
178
|
return d ? new Intl.DateTimeFormat(undefined, format).format(d) : '—';
|
|
179
179
|
}
|
|
180
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
181
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.
|
|
180
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserSincePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
181
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: UserSincePipe, isStandalone: true, name: "userSince" });
|
|
182
182
|
}
|
|
183
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserSincePipe, decorators: [{
|
|
184
184
|
type: Pipe,
|
|
185
185
|
args: [{
|
|
186
186
|
name: 'userSince',
|
|
@@ -224,10 +224,10 @@ class UserRolesPipe {
|
|
|
224
224
|
transform(user) {
|
|
225
225
|
return userRoleNames(user);
|
|
226
226
|
}
|
|
227
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
228
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.
|
|
227
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserRolesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
228
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: UserRolesPipe, isStandalone: true, name: "userRoles" });
|
|
229
229
|
}
|
|
230
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserRolesPipe, decorators: [{
|
|
231
231
|
type: Pipe,
|
|
232
232
|
args: [{ name: 'userRoles', standalone: true, pure: true }]
|
|
233
233
|
}] });
|
|
@@ -235,10 +235,10 @@ class TakePipe {
|
|
|
235
235
|
transform(arr, count = 2) {
|
|
236
236
|
return (arr ?? []).slice(0, Math.max(0, count));
|
|
237
237
|
}
|
|
238
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
239
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.
|
|
238
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TakePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
239
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: TakePipe, isStandalone: true, name: "take" });
|
|
240
240
|
}
|
|
241
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
241
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TakePipe, decorators: [{
|
|
242
242
|
type: Pipe,
|
|
243
243
|
args: [{ name: 'take', standalone: true, pure: true }]
|
|
244
244
|
}] });
|
|
@@ -246,10 +246,10 @@ class SkipPipe {
|
|
|
246
246
|
transform(arr, count = 2) {
|
|
247
247
|
return (arr ?? []).slice(Math.max(0, count));
|
|
248
248
|
}
|
|
249
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
250
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.
|
|
249
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SkipPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
250
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: SkipPipe, isStandalone: true, name: "skip" });
|
|
251
251
|
}
|
|
252
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
252
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SkipPipe, decorators: [{
|
|
253
253
|
type: Pipe,
|
|
254
254
|
args: [{ name: 'skip', standalone: true, pure: true }]
|
|
255
255
|
}] });
|
|
@@ -258,10 +258,10 @@ class MoreCountPipe {
|
|
|
258
258
|
const len = (arr ?? []).length;
|
|
259
259
|
return Math.max(0, len - Math.max(0, shown));
|
|
260
260
|
}
|
|
261
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
262
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.
|
|
261
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MoreCountPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
262
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: MoreCountPipe, isStandalone: true, name: "moreCount" });
|
|
263
263
|
}
|
|
264
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
264
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MoreCountPipe, decorators: [{
|
|
265
265
|
type: Pipe,
|
|
266
266
|
args: [{ name: 'moreCount', standalone: true, pure: true }]
|
|
267
267
|
}] });
|
|
@@ -379,10 +379,10 @@ class UserIndexComponent extends BaseComponent {
|
|
|
379
379
|
console.log('resetPassword', u.id);
|
|
380
380
|
}
|
|
381
381
|
trackById = (_, u) => u.id;
|
|
382
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
383
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: UserIndexComponent, isStandalone: true, selector: "rolatech-user-index", usesInheritance: true, ngImport: i0, template: "<div class=\"p-4 space-y-4\">\n <!-- Header -->\n <div class=\"flex items-start justify-between gap-4\">\n <div>\n <h1 class=\"text-2xl font-semibold\">Users</h1>\n <p class=\"text-sm opacity-70\">Manage users, roles, and access.</p>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <button mat-stroked-button>\n <mat-icon>person_add</mat-icon>\n Invite\n </button>\n </div>\n </div>\n\n <!-- Filters -->\n <!-- <div class=\"grid grid-cols-1 md:grid-cols-12 gap-3\">\n <mat-form-field class=\"md:col-span-6 w-full\">\n <mat-label>Search</mat-label>\n <input matInput [value]=\"q()\" (input)=\"onSearchInput(($any($event.target)).value)\" placeholder=\"Name, email, username\" />\n </mat-form-field>\n\n <mat-form-field class=\"md:col-span-3 w-full\">\n <mat-label>Status</mat-label>\n <mat-select [value]=\"status()\" (valueChange)=\"status.set($event); page.set(0)\">\n <mat-option value=\"\">All</mat-option>\n <mat-option value=\"ACTIVE\">Active</mat-option>\n <mat-option value=\"DISABLED\">Disabled</mat-option>\n <mat-option value=\"LOCKED\">Locked</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"md:col-span-3 w-full\">\n <mat-label>Role</mat-label>\n <mat-select [value]=\"role()\" (valueChange)=\"role.set($event); page.set(0)\">\n <mat-option value=\"\">All</mat-option>\n @for (r of roles(); track r) {\n <mat-option [value]=\"r\">{{ r }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div> -->\n\n <!-- Table card -->\n <div class=\"rounded-2xl border border-[--rt-border-color] bg-[--rt-base-background] overflow-hidden\">\n <div class=\"px-5 py-4 border-b border-[--rt-border-color] flex items-center justify-between\">\n <div class=\"font-semibold\">All users</div>\n <div class=\"text-sm opacity-70\">Total: {{ length }}</div>\n </div>\n\n <div class=\"overflow-auto\">\n <table class=\"w-full text-sm\">\n <thead class=\"bg-black/5 text-left\">\n <tr>\n <th class=\"p-4 min-w-[280px]\">User</th>\n <th class=\"p-4 min-w-[220px]\">Email</th>\n <th class=\"p-4 min-w-[220px] hidden md:table-cell\">Roles</th>\n <th class=\"p-4 min-w-[120px] hidden lg:table-cell\">Status</th>\n <th class=\"p-3 min-w-[140px] hidden lg:table-cell\">Since</th>\n <th class=\"p-3 w-[120px]\"></th>\n </tr>\n </thead>\n\n <tbody>\n @if (loading) {\n @for (_ of [1, 2, 3, 4, 5, 6, 7, 8]; track _) {\n <tr class=\"border-t border-[--rt-border-color]\">\n <td class=\"p-3\">\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10 rounded-full bg-black/10\"></div>\n <div class=\"space-y-2\">\n <div class=\"w-44 h-4 bg-black/10 rounded\"></div>\n <div class=\"w-28 h-3 bg-black/10 rounded\"></div>\n </div>\n </div>\n </td>\n <td class=\"p-3\"><div class=\"w-56 h-4 bg-black/10 rounded\"></div></td>\n <td class=\"p-3 hidden md:table-cell\"><div class=\"w-40 h-4 bg-black/10 rounded\"></div></td>\n <td class=\"p-3 hidden lg:table-cell\"><div class=\"w-20 h-4 bg-black/10 rounded\"></div></td>\n <td class=\"p-3 hidden lg:table-cell\"><div class=\"w-24 h-4 bg-black/10 rounded\"></div></td>\n <td class=\"p-3 text-right\"><div class=\"w-16 h-8 bg-black/10 rounded ml-auto\"></div></td>\n </tr>\n }\n } @else {\n @if (users().length === 0) {\n <tr class=\"border-t\">\n <td class=\"p-6 text-sm opacity-70\" colspan=\"6\">No users found.</td>\n </tr>\n } @else {\n @for (u of users(); track u.id) {\n <tr class=\"border-t border-[--rt-border-color] hover:bg-black/5 cursor-pointer\" (click)=\"openUser(u.id!)\">\n <!-- User -->\n <td class=\"p-3\">\n <div class=\"flex items-center gap-3 min-w-0\">\n <div class=\"relative\">\n @if (u | userAvatar; as avatar) {\n <img class=\"w-10 h-10 rounded-full object-cover border\" [src]=\"avatar\" alt=\"avatar\" />\n } @else {\n <div\n class=\"w-10 h-10 rounded-full border bg-[--rt-brand-color] text-white flex items-center justify-center font-semibold\"\n >\n {{ u | userInitials }}\n </div>\n }\n\n <span\n class=\"absolute -right-0 -bottom-0 w-3 h-3 rounded-full border border-[--rt-border-color] bg-[--rt-base-background] flex items-center justify-center\"\n >\n <span\n class=\"w-2 h-2 rounded-full\"\n [class]=\"\n u.status.toString() === 'ACTIVE'\n ? 'bg-green-500'\n : u.status.toString() === 'LOCKED'\n ? 'bg-red-500'\n : 'bg-amber-500'\n \"\n ></span>\n </span>\n </div>\n\n <div class=\"min-w-0\">\n <div class=\"font-medium truncate\">{{ u | userName }}</div>\n <div class=\"text-xs opacity-70 truncate\">@{{ u.username }}</div>\n </div>\n </div>\n </td>\n\n <!-- Email -->\n <td class=\"p-3\">\n <div class=\"truncate\">{{ u?.email ?? '\u2014' }}</div>\n </td>\n\n <!-- Roles -->\n <td class=\"p-3 hidden md:table-cell\" (click)=\"$event.stopPropagation()\">\n @let roles = u | userRoles;\n @let shown = 2;\n\n <div class=\"flex flex-wrap items-center gap-1.5\">\n @for (r of roles | take: shown; track r) {\n <span class=\"px-2 py-0.5 rounded-full text-xs bg-black/5 border border-[--rt-border-color]\">\n {{ r }}\n </span>\n }\n\n @if ((roles | moreCount: shown) > 0) {\n <button mat-button class=\"!min-w-0 !h-6 !px-2 !text-xs\" [matMenuTriggerFor]=\"rolesMenu\">\n +{{ roles | moreCount: shown }}\n </button>\n\n <mat-menu #rolesMenu=\"matMenu\">\n @for (r of roles; track r) {\n <button mat-menu-item disabled>{{ r }}</button>\n }\n </mat-menu>\n }\n </div>\n </td>\n\n <!-- Status -->\n <td class=\"p-3 hidden lg:table-cell\">\n <span\n class=\"px-2 py-0.5 rounded-full text-xs border border-[--rt-border-color]\"\n [class]=\"\n u.status.toString() === 'ACTIVE'\n ? 'bg-green-500/10 text-green-700 border-green-500/20'\n : u.status.toString() === 'LOCKED'\n ? 'bg-red-500/10 text-red-700 border-red-500/20'\n : 'bg-amber-500/10 text-amber-700 border-amber-500/20'\n \"\n >\n {{ u?.status ?? '\u2014' }}\n </span>\n </td>\n\n <!-- Since -->\n <td class=\"p-3 hidden lg:table-cell opacity-80\">\n {{ u | userSince }}\n </td>\n\n <!-- Actions -->\n <td class=\"p-3 text-right\" (click)=\"$event.stopPropagation()\">\n <button mat-button [matMenuTriggerFor]=\"menu\">Actions</button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openUser(u.id!)\">\n <mat-icon>open_in_new</mat-icon>\n <span>View</span>\n </button>\n <button mat-menu-item (click)=\"toggleStatus(u)\">\n <mat-icon>{{ u.status.toString() === 'ACTIVE' ? 'block' : 'check_circle' }}</mat-icon>\n <span>{{ u.status.toString() === 'ACTIVE' ? 'Disable' : 'Enable' }}</span>\n </button>\n <button mat-menu-item (click)=\"resetPassword(u)\">\n <mat-icon>vpn_key</mat-icon>\n <span>Reset password</span>\n </button>\n </mat-menu>\n </td>\n </tr>\n }\n }\n }\n </tbody>\n </table>\n </div>\n\n <!-- Footer paginator -->\n <div class=\"px-2 py-2 border-t border-[--rt-border-color]\">\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </div>\n </div>\n</div>\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i1$1.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "pipe", type: UserInitialsPipe, name: "userInitials" }, { kind: "pipe", type: UserAvatarPipe, name: "userAvatar" }, { kind: "pipe", type: UserNamePipe, name: "userName" }, { kind: "pipe", type: UserSincePipe, name: "userSince" }, { kind: "pipe", type: UserRolesPipe, name: "userRoles" }, { kind: "pipe", type: TakePipe, name: "take" }, { kind: "pipe", type: MoreCountPipe, name: "moreCount" }] });
|
|
382
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserIndexComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
383
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: UserIndexComponent, isStandalone: true, selector: "rolatech-user-index", usesInheritance: true, ngImport: i0, template: "<div class=\"p-4 space-y-4\">\n <!-- Header -->\n <div class=\"flex items-start justify-between gap-4\">\n <div>\n <h1 class=\"text-2xl font-semibold\">Users</h1>\n <p class=\"text-sm opacity-70\">Manage users, roles, and access.</p>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <button mat-stroked-button>\n <mat-icon>person_add</mat-icon>\n Invite\n </button>\n </div>\n </div>\n\n <!-- Filters -->\n <!-- <div class=\"grid grid-cols-1 md:grid-cols-12 gap-3\">\n <mat-form-field class=\"md:col-span-6 w-full\">\n <mat-label>Search</mat-label>\n <input matInput [value]=\"q()\" (input)=\"onSearchInput(($any($event.target)).value)\" placeholder=\"Name, email, username\" />\n </mat-form-field>\n\n <mat-form-field class=\"md:col-span-3 w-full\">\n <mat-label>Status</mat-label>\n <mat-select [value]=\"status()\" (valueChange)=\"status.set($event); page.set(0)\">\n <mat-option value=\"\">All</mat-option>\n <mat-option value=\"ACTIVE\">Active</mat-option>\n <mat-option value=\"DISABLED\">Disabled</mat-option>\n <mat-option value=\"LOCKED\">Locked</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"md:col-span-3 w-full\">\n <mat-label>Role</mat-label>\n <mat-select [value]=\"role()\" (valueChange)=\"role.set($event); page.set(0)\">\n <mat-option value=\"\">All</mat-option>\n @for (r of roles(); track r) {\n <mat-option [value]=\"r\">{{ r }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div> -->\n\n <!-- Table card -->\n <div class=\"rounded-2xl border border-[--rt-border-color] bg-[--rt-base-background] overflow-hidden\">\n <div class=\"px-5 py-4 border-b border-[--rt-border-color] flex items-center justify-between\">\n <div class=\"font-semibold\">All users</div>\n <div class=\"text-sm opacity-70\">Total: {{ length }}</div>\n </div>\n\n <div class=\"overflow-auto\">\n <table class=\"w-full text-sm\">\n <thead class=\"bg-black/5 text-left\">\n <tr>\n <th class=\"p-4 min-w-[280px]\">User</th>\n <th class=\"p-4 min-w-[220px]\">Email</th>\n <th class=\"p-4 min-w-[220px] hidden md:table-cell\">Roles</th>\n <th class=\"p-4 min-w-[120px] hidden lg:table-cell\">Status</th>\n <th class=\"p-3 min-w-[140px] hidden lg:table-cell\">Since</th>\n <th class=\"p-3 w-[120px]\"></th>\n </tr>\n </thead>\n\n <tbody>\n @if (loading) {\n @for (_ of [1, 2, 3, 4, 5, 6, 7, 8]; track _) {\n <tr class=\"border-t border-[--rt-border-color]\">\n <td class=\"p-3\">\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10 rounded-full bg-black/10\"></div>\n <div class=\"space-y-2\">\n <div class=\"w-44 h-4 bg-black/10 rounded\"></div>\n <div class=\"w-28 h-3 bg-black/10 rounded\"></div>\n </div>\n </div>\n </td>\n <td class=\"p-3\"><div class=\"w-56 h-4 bg-black/10 rounded\"></div></td>\n <td class=\"p-3 hidden md:table-cell\"><div class=\"w-40 h-4 bg-black/10 rounded\"></div></td>\n <td class=\"p-3 hidden lg:table-cell\"><div class=\"w-20 h-4 bg-black/10 rounded\"></div></td>\n <td class=\"p-3 hidden lg:table-cell\"><div class=\"w-24 h-4 bg-black/10 rounded\"></div></td>\n <td class=\"p-3 text-right\"><div class=\"w-16 h-8 bg-black/10 rounded ml-auto\"></div></td>\n </tr>\n }\n } @else {\n @if (users().length === 0) {\n <tr class=\"border-t\">\n <td class=\"p-6 text-sm opacity-70\" colspan=\"6\">No users found.</td>\n </tr>\n } @else {\n @for (u of users(); track u.id) {\n <tr class=\"border-t border-[--rt-border-color] hover:bg-black/5 cursor-pointer\" (click)=\"openUser(u.id!)\">\n <!-- User -->\n <td class=\"p-3\">\n <div class=\"flex items-center gap-3 min-w-0\">\n <div class=\"relative\">\n @if (u | userAvatar; as avatar) {\n <img class=\"w-10 h-10 rounded-full object-cover border\" [src]=\"avatar\" alt=\"avatar\" />\n } @else {\n <div\n class=\"w-10 h-10 rounded-full border bg-[--rt-brand-color] text-white flex items-center justify-center font-semibold\"\n >\n {{ u | userInitials }}\n </div>\n }\n\n <span\n class=\"absolute -right-0 -bottom-0 w-3 h-3 rounded-full border border-[--rt-border-color] bg-[--rt-base-background] flex items-center justify-center\"\n >\n <span\n class=\"w-2 h-2 rounded-full\"\n [class]=\"\n u.status.toString() === 'ACTIVE'\n ? 'bg-green-500'\n : u.status.toString() === 'LOCKED'\n ? 'bg-red-500'\n : 'bg-amber-500'\n \"\n ></span>\n </span>\n </div>\n\n <div class=\"min-w-0\">\n <div class=\"font-medium truncate\">{{ u | userName }}</div>\n <div class=\"text-xs opacity-70 truncate\">@{{ u.username }}</div>\n </div>\n </div>\n </td>\n\n <!-- Email -->\n <td class=\"p-3\">\n <div class=\"truncate\">{{ u?.email ?? '\u2014' }}</div>\n </td>\n\n <!-- Roles -->\n <td class=\"p-3 hidden md:table-cell\" (click)=\"$event.stopPropagation()\">\n @let roles = u | userRoles;\n @let shown = 2;\n\n <div class=\"flex flex-wrap items-center gap-1.5\">\n @for (r of roles | take: shown; track r) {\n <span class=\"px-2 py-0.5 rounded-full text-xs bg-black/5 border border-[--rt-border-color]\">\n {{ r }}\n </span>\n }\n\n @if ((roles | moreCount: shown) > 0) {\n <button mat-button class=\"!min-w-0 !h-6 !px-2 !text-xs\" [matMenuTriggerFor]=\"rolesMenu\">\n +{{ roles | moreCount: shown }}\n </button>\n\n <mat-menu #rolesMenu=\"matMenu\">\n @for (r of roles; track r) {\n <button mat-menu-item disabled>{{ r }}</button>\n }\n </mat-menu>\n }\n </div>\n </td>\n\n <!-- Status -->\n <td class=\"p-3 hidden lg:table-cell\">\n <span\n class=\"px-2 py-0.5 rounded-full text-xs border border-[--rt-border-color]\"\n [class]=\"\n u.status.toString() === 'ACTIVE'\n ? 'bg-green-500/10 text-green-700 border-green-500/20'\n : u.status.toString() === 'LOCKED'\n ? 'bg-red-500/10 text-red-700 border-red-500/20'\n : 'bg-amber-500/10 text-amber-700 border-amber-500/20'\n \"\n >\n {{ u?.status ?? '\u2014' }}\n </span>\n </td>\n\n <!-- Since -->\n <td class=\"p-3 hidden lg:table-cell opacity-80\">\n {{ u | userSince }}\n </td>\n\n <!-- Actions -->\n <td class=\"p-3 text-right\" (click)=\"$event.stopPropagation()\">\n <button mat-button [matMenuTriggerFor]=\"menu\">Actions</button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openUser(u.id!)\">\n <mat-icon>open_in_new</mat-icon>\n <span>View</span>\n </button>\n <button mat-menu-item (click)=\"toggleStatus(u)\">\n <mat-icon>{{ u.status.toString() === 'ACTIVE' ? 'block' : 'check_circle' }}</mat-icon>\n <span>{{ u.status.toString() === 'ACTIVE' ? 'Disable' : 'Enable' }}</span>\n </button>\n <button mat-menu-item (click)=\"resetPassword(u)\">\n <mat-icon>vpn_key</mat-icon>\n <span>Reset password</span>\n </button>\n </mat-menu>\n </td>\n </tr>\n }\n }\n }\n </tbody>\n </table>\n </div>\n\n <!-- Footer paginator -->\n <div class=\"px-2 py-2 border-t border-[--rt-border-color]\">\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </div>\n </div>\n</div>\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i1$1.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "pipe", type: UserInitialsPipe, name: "userInitials" }, { kind: "pipe", type: UserAvatarPipe, name: "userAvatar" }, { kind: "pipe", type: UserNamePipe, name: "userName" }, { kind: "pipe", type: UserSincePipe, name: "userSince" }, { kind: "pipe", type: UserRolesPipe, name: "userRoles" }, { kind: "pipe", type: TakePipe, name: "take" }, { kind: "pipe", type: MoreCountPipe, name: "moreCount" }] });
|
|
384
384
|
}
|
|
385
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
385
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserIndexComponent, decorators: [{
|
|
386
386
|
type: Component,
|
|
387
387
|
args: [{ selector: 'rolatech-user-index', imports: [
|
|
388
388
|
CommonModule,
|
|
@@ -465,10 +465,10 @@ class AgentManageApplicationDetailComponent extends BaseComponent {
|
|
|
465
465
|
}
|
|
466
466
|
});
|
|
467
467
|
}
|
|
468
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
469
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
468
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgentManageApplicationDetailComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
469
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AgentManageApplicationDetailComponent, isStandalone: true, selector: "rolatech-agent-manage-application-detail", usesInheritance: true, ngImport: i0, template: "@if (application) {\n <rolatech-toolbar [title]=\"status[application.status]\" large link=\"../../\">\n @if (application.status.toString() === 'PENDING') {\n <button mat-flat-button (click)=\"approve()\" i18n>Approve</button>\n <button mat-button (click)=\"reject()\" i18n>Reject</button>\n }\n </rolatech-toolbar>\n <div class=\"px-4\">\n <div>\n <div class=\"text-lg font-bold py-2\">User details</div>\n <div class=\"flex\">\n <div class=\"bg-[--rt-brand-color] min-w-12 max-h-12 rounded-full mr-3\">\n @if (application.user.avatar) {\n <img class=\"w-12 h-12 object-cover rounded-full\" [src]=\"application.user.avatar\" alt=\"avatar img\" />\n }\n </div>\n <div class=\"flex flex-col w-full\">\n @if (application.user.firstName) {\n <div>{{ application.user.firstName }}, {{ application.user.lastName }}</div>\n } @else {\n @if (application.user.name) {\n <div>{{ application.user.name }}</div>\n }\n }\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span i18n>Phone: </span>\n <span class=\"mr-1\">{{ application.phone }}</span>\n </div>\n <div>\n <span i18n>Email: </span>\n <span class=\"mr-1\">{{ application.email }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <hr class=\"my-3\" />\n <div>\n <div class=\"text-lg font-bold py-2\">Application details</div>\n <div class=\"flex overflow-x-scroll scrollbar-hide\">\n <div class=\"flex flex-col w-full\">\n <rolatech-rich-label label=\"Business Name\" [title]=\"application.businessName\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Experience Years\" [title]=\"application.experienceYears\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Created At\" [title]=\"application.createdAt\"></rolatech-rich-label>\n </div>\n </div>\n <hr class=\"my-3\" />\n </div>\n <div>\n <div class=\"text-lg font-bold py-2\">Documents</div>\n @if (application.documents.length > 0) {\n @for (item of application.documents; track $index) {\n <a class=\"underline underline-offset-4\" [href]=\"item\" target=\"_blank\">Document: {{ $index + 1 }}</a>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n </div>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: RichLabelComponent, selector: "rolatech-rich-label", inputs: ["label", "title"] }, { kind: "component", type: EmptyComponent, selector: "rolatech-empty" }] });
|
|
470
470
|
}
|
|
471
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
471
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgentManageApplicationDetailComponent, decorators: [{
|
|
472
472
|
type: Component,
|
|
473
473
|
args: [{ selector: 'rolatech-agent-manage-application-detail', imports: [CommonModule, ToolbarComponent, MatButtonModule, RichLabelComponent, EmptyComponent], template: "@if (application) {\n <rolatech-toolbar [title]=\"status[application.status]\" large link=\"../../\">\n @if (application.status.toString() === 'PENDING') {\n <button mat-flat-button (click)=\"approve()\" i18n>Approve</button>\n <button mat-button (click)=\"reject()\" i18n>Reject</button>\n }\n </rolatech-toolbar>\n <div class=\"px-4\">\n <div>\n <div class=\"text-lg font-bold py-2\">User details</div>\n <div class=\"flex\">\n <div class=\"bg-[--rt-brand-color] min-w-12 max-h-12 rounded-full mr-3\">\n @if (application.user.avatar) {\n <img class=\"w-12 h-12 object-cover rounded-full\" [src]=\"application.user.avatar\" alt=\"avatar img\" />\n }\n </div>\n <div class=\"flex flex-col w-full\">\n @if (application.user.firstName) {\n <div>{{ application.user.firstName }}, {{ application.user.lastName }}</div>\n } @else {\n @if (application.user.name) {\n <div>{{ application.user.name }}</div>\n }\n }\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span i18n>Phone: </span>\n <span class=\"mr-1\">{{ application.phone }}</span>\n </div>\n <div>\n <span i18n>Email: </span>\n <span class=\"mr-1\">{{ application.email }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <hr class=\"my-3\" />\n <div>\n <div class=\"text-lg font-bold py-2\">Application details</div>\n <div class=\"flex overflow-x-scroll scrollbar-hide\">\n <div class=\"flex flex-col w-full\">\n <rolatech-rich-label label=\"Business Name\" [title]=\"application.businessName\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Experience Years\" [title]=\"application.experienceYears\"></rolatech-rich-label>\n <rolatech-rich-label label=\"Created At\" [title]=\"application.createdAt\"></rolatech-rich-label>\n </div>\n </div>\n <hr class=\"my-3\" />\n </div>\n <div>\n <div class=\"text-lg font-bold py-2\">Documents</div>\n @if (application.documents.length > 0) {\n @for (item of application.documents; track $index) {\n <a class=\"underline underline-offset-4\" [href]=\"item\" target=\"_blank\">Document: {{ $index + 1 }}</a>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n </div>\n </div>\n}\n" }]
|
|
474
474
|
}] });
|
|
@@ -476,10 +476,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImpor
|
|
|
476
476
|
class AgentApplicationItemComponent {
|
|
477
477
|
application = input.required(...(ngDevMode ? [{ debugName: "application" }] : []));
|
|
478
478
|
status = AgentApplicationStatus;
|
|
479
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
480
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
479
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgentApplicationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
480
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AgentApplicationItemComponent, isStandalone: true, selector: "rolatech-agent-application-item", inputs: { application: { classPropertyName: "application", publicName: "application", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex flex-col hover:bg-[--rt-raised-background] cursor-pointer p-3\">\n <div class=\"flex justify-between w-full mb-2\">\n <a class=\"flex items-center gap-3\">\n <span>Application ID: {{ application().id }}</span>\n </a>\n <span class=\"font-medium text-sm\">{{ status[application().status] }}</span>\n </div>\n <div class=\"flex overflow-x-scroll scrollbar-hide\">\n <div class=\"bg-[--rt-brand-color] min-w-12 max-h-12 rounded-full mr-3\">\n @if (application().user.avatar) {\n <img class=\"w-12 h-12 object-cover rounded-full\" [src]=\"application().user.avatar\" alt=\"avatar img\" />\n }\n </div>\n <div class=\"flex flex-col w-full\">\n <div>{{ application().businessName }}</div>\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span i18n>Phone: </span>\n <span class=\"mr-1\">{{ application().experienceYears }}</span>\n </div>\n <div>\n <span i18n>Email: </span>\n <span class=\"mr-1\">{{ application().user.email }}</span>\n </div>\n </div>\n <div class=\"flex justify-end\">\n <span class=\"text-sm opacity-70\">{{ application().createdAt }}</span>\n </div>\n </div>\n </div>\n <hr />\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }] });
|
|
481
481
|
}
|
|
482
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
482
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgentApplicationItemComponent, decorators: [{
|
|
483
483
|
type: Component,
|
|
484
484
|
args: [{ selector: 'rolatech-agent-application-item', imports: [MatIconModule], template: "<div class=\"flex flex-col hover:bg-[--rt-raised-background] cursor-pointer p-3\">\n <div class=\"flex justify-between w-full mb-2\">\n <a class=\"flex items-center gap-3\">\n <span>Application ID: {{ application().id }}</span>\n </a>\n <span class=\"font-medium text-sm\">{{ status[application().status] }}</span>\n </div>\n <div class=\"flex overflow-x-scroll scrollbar-hide\">\n <div class=\"bg-[--rt-brand-color] min-w-12 max-h-12 rounded-full mr-3\">\n @if (application().user.avatar) {\n <img class=\"w-12 h-12 object-cover rounded-full\" [src]=\"application().user.avatar\" alt=\"avatar img\" />\n }\n </div>\n <div class=\"flex flex-col w-full\">\n <div>{{ application().businessName }}</div>\n <div class=\"inline-flex gap-1 mt-2\">\n <div>\n <span i18n>Phone: </span>\n <span class=\"mr-1\">{{ application().experienceYears }}</span>\n </div>\n <div>\n <span i18n>Email: </span>\n <span class=\"mr-1\">{{ application().user.email }}</span>\n </div>\n </div>\n <div class=\"flex justify-end\">\n <span class=\"text-sm opacity-70\">{{ application().createdAt }}</span>\n </div>\n </div>\n </div>\n <hr />\n</div>\n" }]
|
|
485
485
|
}], propDecorators: { application: [{ type: i0.Input, args: [{ isSignal: true, alias: "application", required: true }] }] } });
|
|
@@ -558,10 +558,10 @@ class AgentManageApplicationIndexComponent extends BaseComponent {
|
|
|
558
558
|
this.dialogService.open(options);
|
|
559
559
|
this.dialogService.confirmed();
|
|
560
560
|
}
|
|
561
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
562
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
561
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgentManageApplicationIndexComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
562
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AgentManageApplicationIndexComponent, isStandalone: true, selector: "rolatech-agent-manage-application-index", usesInheritance: true, ngImport: i0, template: "<rolatech-toolbar title=\"Applications\">\n <div class=\"flex items-center gap-2\"></div>\n</rolatech-toolbar>\n<rolatech-tabs [select]=\"select\">\n @for (item of links; track item) {\n @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n }\n }\n</rolatech-tabs>\n<div>\n @if (applications) {\n @for (application of applications; track $index) {\n <rolatech-agent-application-item\n [application]=\"application\"\n [routerLink]=\"['./', application.id]\"\n ></rolatech-agent-application-item>\n }\n } @else {\n <rolatech-empty></rolatech-empty>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: TabsComponent, selector: "rolatech-tabs", inputs: ["select", "loading", "block"], outputs: ["selectChange"] }, { kind: "component", type: TabComponent, selector: "rolatech-tab", inputs: ["label"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: AgentApplicationItemComponent, selector: "rolatech-agent-application-item", inputs: ["application"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: EmptyComponent, selector: "rolatech-empty" }] });
|
|
563
563
|
}
|
|
564
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
564
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgentManageApplicationIndexComponent, decorators: [{
|
|
565
565
|
type: Component,
|
|
566
566
|
args: [{ selector: 'rolatech-agent-manage-application-index', imports: [
|
|
567
567
|
CommonModule,
|
|
@@ -604,10 +604,10 @@ class UserDataService {
|
|
|
604
604
|
send(data) {
|
|
605
605
|
this.userInfo.next(data);
|
|
606
606
|
}
|
|
607
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
608
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.
|
|
607
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
608
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserDataService, providedIn: 'root' });
|
|
609
609
|
}
|
|
610
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
610
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserDataService, decorators: [{
|
|
611
611
|
type: Injectable,
|
|
612
612
|
args: [{
|
|
613
613
|
providedIn: 'root',
|
|
@@ -690,10 +690,10 @@ class UserLayoutComponent extends BaseComponent {
|
|
|
690
690
|
},
|
|
691
691
|
});
|
|
692
692
|
}
|
|
693
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
694
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
693
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
694
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: UserLayoutComponent, isStandalone: true, selector: "rolatech-user-layout", inputs: { selectIndex: { classPropertyName: "selectIndex", publicName: "selectIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectIndex: "selectIndexChange" }, usesInheritance: true, ngImport: i0, template: "<rolatech-container>\n @if (userInfo) {\n <div>\n <div class=\"h-8\"></div>\n <div class=\"flex\">\n <div\n class=\"w-[80px] h-[80px] md:w-36 md:h-36 sm:w-28 sm:h-28 rounded-full border-white mr-4 bg-[--rt-raised-background]\"\n >\n @defer {\n <rolatech-avatar [src]=\"userInfo.avatar + '!w400'\" size=\"full\"> </rolatech-avatar>\n }\n </div>\n <div class=\"flex flex-col flex-grow\">\n <div class=\"flex justify-between items-center sm:mt-1\">\n <div class=\"flex items-center gap-2\">\n <div class=\"text-xl md:text-2xl font-medium\">\n <span>{{ userInfo.name }}</span>\n </div>\n <mat-icon color=\"primary\">verified</mat-icon>\n </div>\n <div>\n @if (isFollowed) {\n <button mat-flat-button (click)=\"unfollow()\" class=\"w-28 max-h-8\" i18n>Unfollow</button>\n } @else {\n <button mat-flat-button (click)=\"follow()\" class=\"w-28 max-h-8\" i18n>Follow</button>\n }\n </div>\n </div>\n <div class=\"text-sm text-[--rt-text-secondary]\">\n <div class=\"flex gap-3 py-2 items-center\">\n <a>\n <span>@{{ userInfo.username }}</span>\n </a>\n <a class=\"cursor-pointer hover:text-orange-600\" [routerLink]=\"['./following']\">\n <span class=\"font-bold\">{{ statsData?.following }}</span>\n <span class=\"ml-1\" i18n>Following</span>\n </a>\n <a class=\"cursor-pointer hover:text-orange-600\" [routerLink]=\"['./followers']\">\n <span class=\"font-bold\">{{ statsData?.followers }}</span>\n <span class=\"ml-1\" i18n>Followers</span>\n </a>\n </div>\n <div class=\"mb-3\">\n <div>\n {{ userInfo.bio }}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"py-2\">\n <rolatech-tabs [(select)]=\"selectIndex\" ngSkipHydration>\n <rolatech-tab label=\"Course\" routerLink=\"./\"></rolatech-tab>\n <rolatech-tab label=\"Community\" routerLink=\"./community\"></rolatech-tab>\n <rolatech-tab label=\"Store\" routerLink=\"./store\"></rolatech-tab>\n </rolatech-tabs>\n </div>\n\n <router-outlet></router-outlet>\n </div>\n }\n</rolatech-container>\n", styles: ["mat-icon{transform:scale(.8);color:var(--rt-brand-color)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ContainerComponent, selector: "rolatech-container" }, { kind: "component", type: TabsComponent, selector: "rolatech-tabs", inputs: ["select", "loading", "block"], outputs: ["selectChange"] }, { kind: "component", type: TabComponent, selector: "rolatech-tab", inputs: ["label"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], deferBlockDependencies: [() => [AvatarComponent]] });
|
|
695
695
|
}
|
|
696
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
696
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserLayoutComponent, decorators: [{
|
|
697
697
|
type: Component,
|
|
698
698
|
args: [{ selector: 'rolatech-user-layout', imports: [
|
|
699
699
|
MatIconModule,
|
|
@@ -736,10 +736,10 @@ class UserInfoComponent extends BaseComponent {
|
|
|
736
736
|
},
|
|
737
737
|
});
|
|
738
738
|
}
|
|
739
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
740
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
739
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
740
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: UserInfoComponent, isStandalone: true, selector: "rolatech-user-info", usesInheritance: true, ngImport: i0, template: "<rolatech-rich-view list>\n @for (item of courses; track $index) {\n <rolatech-rich-item\n [title]=\"item.name\"\n [thumbnail]=\"item.media[0].url + '!w400'\"\n [price]=\"(item.pricing[0].total / 100).toFixed(2)\"\n [routerLink]=\"['/courses', item.id]\"\n class=\"cursor-pointer hover:bg-[--rt-raised-background]\"\n ></rolatech-rich-item>\n }\n</rolatech-rich-view>\n", styles: [""], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: RichViewComponent, selector: "rolatech-rich-view", inputs: ["list", "wrap"] }, { kind: "component", type: RichItemComponent, selector: "rolatech-rich-item", inputs: ["list", "thumbnail", "avatar", "title", "subtitle", "price", "thumbnailRatio", "thumbnailMode"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
741
741
|
}
|
|
742
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
742
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserInfoComponent, decorators: [{
|
|
743
743
|
type: Component,
|
|
744
744
|
args: [{ selector: 'rolatech-user-info', imports: [RouterLink, RichViewComponent, RichItemComponent], encapsulation: ViewEncapsulation.None, template: "<rolatech-rich-view list>\n @for (item of courses; track $index) {\n <rolatech-rich-item\n [title]=\"item.name\"\n [thumbnail]=\"item.media[0].url + '!w400'\"\n [price]=\"(item.pricing[0].total / 100).toFixed(2)\"\n [routerLink]=\"['/courses', item.id]\"\n class=\"cursor-pointer hover:bg-[--rt-raised-background]\"\n ></rolatech-rich-item>\n }\n</rolatech-rich-view>\n" }]
|
|
745
745
|
}], ctorParameters: () => [] });
|
|
@@ -751,10 +751,10 @@ class UserCommunityComponent {
|
|
|
751
751
|
next: (userInfo) => { },
|
|
752
752
|
});
|
|
753
753
|
}
|
|
754
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
755
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.
|
|
754
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserCommunityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
755
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: UserCommunityComponent, isStandalone: true, selector: "rolatech-user-community", ngImport: i0, template: "<rolatech-empty></rolatech-empty>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: EmptyComponent, selector: "rolatech-empty" }], encapsulation: i0.ViewEncapsulation.None });
|
|
756
756
|
}
|
|
757
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
757
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserCommunityComponent, decorators: [{
|
|
758
758
|
type: Component,
|
|
759
759
|
args: [{ selector: 'rolatech-user-community', imports: [CommonModule, EmptyComponent], encapsulation: ViewEncapsulation.None, template: "<rolatech-empty></rolatech-empty>\n" }]
|
|
760
760
|
}] });
|
|
@@ -781,10 +781,10 @@ class UserStoreComponent {
|
|
|
781
781
|
},
|
|
782
782
|
});
|
|
783
783
|
}
|
|
784
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
785
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
784
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserStoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
785
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: UserStoreComponent, isStandalone: true, selector: "rolatech-user-store", ngImport: i0, template: "@if (products) {\n <div>\n <rolatech-rich-view wrap>\n @for (item of products; track item) {\n @defer {\n <rolatech-rich-item\n [routerLink]=\"['/products', item.id]\"\n [thumbnail]=\"item.media ? item.media[0].url + '!w400' : ''\"\n [title]=\"item.name\"\n [subtitle]=\"item.description\"\n [price]=\"(item.price / 100).toFixed(2)\"\n thumbnailRatio=\"square\"\n ></rolatech-rich-item>\n }\n }\n </rolatech-rich-view>\n </div>\n} @else {\n <rolatech-empty></rolatech-empty>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: EmptyComponent, selector: "rolatech-empty" }, { kind: "component", type: RichViewComponent, selector: "rolatech-rich-view", inputs: ["list", "wrap"] }], encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [RichItemComponent, import('@angular/router').then(m => m.RouterLink)]] });
|
|
786
786
|
}
|
|
787
|
-
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.0.
|
|
787
|
+
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.0.6", ngImport: i0, type: UserStoreComponent, resolveDeferredDeps: () => [import('@angular/router').then(m => m.RouterLink)], resolveMetadata: RouterLink => ({ decorators: [{
|
|
788
788
|
type: Component,
|
|
789
789
|
args: [{ selector: 'rolatech-user-store', imports: [CommonModule, EmptyComponent, RichViewComponent, RichItemComponent, RouterLink], encapsulation: ViewEncapsulation.None, template: "@if (products) {\n <div>\n <rolatech-rich-view wrap>\n @for (item of products; track item) {\n @defer {\n <rolatech-rich-item\n [routerLink]=\"['/products', item.id]\"\n [thumbnail]=\"item.media ? item.media[0].url + '!w400' : ''\"\n [title]=\"item.name\"\n [subtitle]=\"item.description\"\n [price]=\"(item.price / 100).toFixed(2)\"\n thumbnailRatio=\"square\"\n ></rolatech-rich-item>\n }\n }\n </rolatech-rich-view>\n </div>\n} @else {\n <rolatech-empty></rolatech-empty>\n}\n" }]
|
|
790
790
|
}], ctorParameters: null, propDecorators: null }) });
|
|
@@ -802,10 +802,10 @@ class UserItemComponent {
|
|
|
802
802
|
onUnFollow() {
|
|
803
803
|
this.unfollow.emit(this.user().username);
|
|
804
804
|
}
|
|
805
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
806
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
805
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
806
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: UserItemComponent, isStandalone: true, selector: "rolatech-user-item", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null }, isFollowing: { classPropertyName: "isFollowing", publicName: "isFollowing", isSignal: true, isRequired: false, transformFunction: null }, own: { classPropertyName: "own", publicName: "own", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { follow: "follow", unfollow: "unfollow" }, host: { properties: { "class.rolatech-user-item": "this.hasClass" } }, ngImport: i0, template: "<div class=\"flex w-full justify-between items-center p-2 hover:bg-[--rt-raised-background] cursor-pointer\">\n <div class=\"flex items-center\">\n <div class=\"bg-[--rt-brand-color] w-12 h-12 rounded-full\">\n @if (user().avatar) {\n <img class=\"w-12 h-12 object-cover rounded-full\" [src]=\"user().avatar\" alt=\"avatar img\" />\n }\n </div>\n <div class=\"flex flex-col ml-3\">\n <a class=\"text-lg font-bold\">\n <span>{{ user().name }}</span>\n </a>\n <a class=\"text-md\">\n <span>{{ user().username }}</span>\n </a>\n </div>\n </div>\n @if (!own()) {\n @if (isFollowing()) {\n <button mat-flat-button class=\"w-28 max-h-8\" (click)=\"onUnFollow()\" i18n>Unfollow</button>\n } @else {\n <button mat-flat-button class=\"w-28 max-h-8\" (click)=\"onFollow()\" i18n>Follow</button>\n }\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
807
807
|
}
|
|
808
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
808
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserItemComponent, decorators: [{
|
|
809
809
|
type: Component,
|
|
810
810
|
args: [{ selector: 'rolatech-user-item', imports: [CommonModule, MatButtonModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"flex w-full justify-between items-center p-2 hover:bg-[--rt-raised-background] cursor-pointer\">\n <div class=\"flex items-center\">\n <div class=\"bg-[--rt-brand-color] w-12 h-12 rounded-full\">\n @if (user().avatar) {\n <img class=\"w-12 h-12 object-cover rounded-full\" [src]=\"user().avatar\" alt=\"avatar img\" />\n }\n </div>\n <div class=\"flex flex-col ml-3\">\n <a class=\"text-lg font-bold\">\n <span>{{ user().name }}</span>\n </a>\n <a class=\"text-md\">\n <span>{{ user().username }}</span>\n </a>\n </div>\n </div>\n @if (!own()) {\n @if (isFollowing()) {\n <button mat-flat-button class=\"w-28 max-h-8\" (click)=\"onUnFollow()\" i18n>Unfollow</button>\n } @else {\n <button mat-flat-button class=\"w-28 max-h-8\" (click)=\"onFollow()\" i18n>Follow</button>\n }\n }\n</div>\n" }]
|
|
811
811
|
}], propDecorators: { hasClass: [{
|
|
@@ -923,10 +923,10 @@ class UserFollowInfoComponent {
|
|
|
923
923
|
item.isFollowing = friendships[item.id].following;
|
|
924
924
|
});
|
|
925
925
|
}
|
|
926
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
927
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
926
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserFollowInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
927
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: UserFollowInfoComponent, isStandalone: true, selector: "rolatech-user-follow-info", ngImport: i0, template: "<rolatech-container>\n <rolatech-toolbar [title]=\"userInfo?.name\" link=\"../\" [subtitle]=\"userInfo?.username\"></rolatech-toolbar>\n <div class=\"mb-3\"></div>\n\n <rolatech-tabs [(select)]=\"tabIndex\">\n <rolatech-tab label=\"Following\" [routerLink]=\"['../', 'following']\"></rolatech-tab>\n <rolatech-tab label=\"Followers\" [routerLink]=\"['../', 'followers']\"></rolatech-tab>\n </rolatech-tabs>\n <div class=\"mb-3\"></div>\n @for (user of users; track $index) {\n <rolatech-user-item\n [user]=\"user\"\n [routerLink]=\"'/@' + user.username\"\n [isFollowing]=\"user.isFollowing\"\n (follow)=\"follow(user)\"\n (unfollow)=\"unfollow(user)\"\n [own]=\"user.id === myId\"\n ></rolatech-user-item>\n }\n</rolatech-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TabsComponent, selector: "rolatech-tabs", inputs: ["select", "loading", "block"], outputs: ["selectChange"] }, { kind: "component", type: TabComponent, selector: "rolatech-tab", inputs: ["label"] }, { kind: "component", type: ContainerComponent, selector: "rolatech-container" }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: UserItemComponent, selector: "rolatech-user-item", inputs: ["user", "isFollowing", "own"], outputs: ["follow", "unfollow"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
928
928
|
}
|
|
929
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
929
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserFollowInfoComponent, decorators: [{
|
|
930
930
|
type: Component,
|
|
931
931
|
args: [{ selector: 'rolatech-user-follow-info', imports: [CommonModule, TabsComponent, TabComponent, ContainerComponent, ToolbarComponent, RouterLink, UserItemComponent], encapsulation: ViewEncapsulation.None, template: "<rolatech-container>\n <rolatech-toolbar [title]=\"userInfo?.name\" link=\"../\" [subtitle]=\"userInfo?.username\"></rolatech-toolbar>\n <div class=\"mb-3\"></div>\n\n <rolatech-tabs [(select)]=\"tabIndex\">\n <rolatech-tab label=\"Following\" [routerLink]=\"['../', 'following']\"></rolatech-tab>\n <rolatech-tab label=\"Followers\" [routerLink]=\"['../', 'followers']\"></rolatech-tab>\n </rolatech-tabs>\n <div class=\"mb-3\"></div>\n @for (user of users; track $index) {\n <rolatech-user-item\n [user]=\"user\"\n [routerLink]=\"'/@' + user.username\"\n [isFollowing]=\"user.isFollowing\"\n (follow)=\"follow(user)\"\n (unfollow)=\"unfollow(user)\"\n [own]=\"user.id === myId\"\n ></rolatech-user-item>\n }\n</rolatech-container>\n" }]
|
|
932
932
|
}], ctorParameters: () => [] });
|
|
@@ -986,10 +986,10 @@ class UserDetailComponent extends BaseComponent {
|
|
|
986
986
|
addEmail() { }
|
|
987
987
|
addPhone() { }
|
|
988
988
|
connectWallet() { }
|
|
989
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
990
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
989
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserDetailComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
990
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: UserDetailComponent, isStandalone: true, selector: "rolatech-user-detail", usesInheritance: true, ngImport: i0, template: "<rolatech-toolbar title=\"Users\" link=\"../\"> </rolatech-toolbar>\n<div class=\"p-4 space-y-4\">\n <!-- Header -->\n <div class=\"flex items-start justify-between gap-4\">\n <div class=\"flex items-start gap-3 min-w-0\">\n <!-- avatar -->\n <div class=\"relative\">\n @if (avatarUrl()) {\n <img class=\"w-12 h-12 rounded-full object-cover border\" [src]=\"avatarUrl()!\" alt=\"avatar\" />\n } @else {\n <div\n class=\"w-12 h-12 rounded-full border bg-[--rt-brand-color] text-white flex items-center justify-center font-semibold\"\n >\n {{ initials() }}\n </div>\n }\n\n <!-- status dot -->\n <span\n class=\"absolute -right-0 -bottom-0 w-3 h-3 rounded-full border border-[--rt-border-color] bg-[--rt-base-background] flex items-center justify-center\"\n >\n <span\n class=\"w-2 h-2 rounded-full\"\n [class]=\"\n user()?.status?.toString() === 'ACTIVE'\n ? 'bg-green-500'\n : user()?.status?.toString() === 'LOCKED'\n ? 'bg-red-500'\n : 'bg-amber-500'\n \"\n ></span>\n </span>\n </div>\n\n <div class=\"min-w-0\">\n <div class=\"flex items-center gap-2 min-w-0\">\n <h1 class=\"text-2xl font-semibold truncate\">{{ name() }}</h1>\n\n @if (user()?.status?.toString() === 'LOCKED') {\n <span class=\"px-2 py-0.5 rounded-md text-xs bg-red-500/10 text-red-700 border border-red-500/20\">\n <mat-icon class=\"align-middle !text-[14px] mr-1\">lock</mat-icon>\n Locked\n </span>\n } @else if (user()?.status?.toString() === 'DISABLED') {\n <span class=\"px-2 py-0.5 rounded-md text-xs bg-red-500/10 text-red-700 border border-red-500/20\"> Disabled </span>\n }\n </div>\n\n <div class=\"text-sm opacity-70 flex items-center gap-2 mt-1\">\n <span>{{ user()?.status?.toString() === 'ACTIVE' ? 'Active' : (user()?.status ?? '\u2014') }}</span>\n </div>\n </div>\n </div>\n\n <!-- actions -->\n <!-- <div class=\"flex items-center gap-2\">\n <button mat-stroked-button (click)=\"openUserObject()\">User object</button>\n <button mat-flat-button color=\"primary\" (click)=\"editProfile()\">Edit profile</button>\n\n <button mat-icon-button [matMenuTriggerFor]=\"moreMenu\" aria-label=\"More\">\n <mat-icon>more_horiz</mat-icon>\n </button>\n <mat-menu #moreMenu=\"matMenu\">\n <button mat-menu-item (click)=\"toggleStatus()\">\n <mat-icon>{{ user()?.status?.toString() === 'ACTIVE' ? 'block' : 'check_circle' }}</mat-icon>\n <span>{{ user()?.status?.toString() === 'ACTIVE' ? 'Disable' : 'Enable' }}</span>\n </button>\n <button mat-menu-item (click)=\"resetPassword()\">\n <mat-icon>vpn_key</mat-icon>\n <span>Reset password</span>\n </button>\n <button mat-menu-item (click)=\"copyId()\">\n <mat-icon>content_copy</mat-icon>\n <span>Copy user ID</span>\n </button>\n </mat-menu>\n </div> -->\n </div>\n\n <!-- Info strip (2 columns like screenshot) -->\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-6 border-b pb-5\">\n <dl class=\"space-y-3 text-sm\">\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">badge</mat-icon> User ID</dt>\n <dd class=\"font-mono text-xs truncate max-w-[65%]\">{{ user()?.id }}</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">alternate_email</mat-icon> Username</dt>\n <dd class=\"truncate max-w-[65%]\">@{{ user()?.username }}</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">call</mat-icon> Phone number</dt>\n <dd class=\"truncate max-w-[65%]\">{{ user()?.phone ?? '\u2014' }}</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">mail</mat-icon> Email address</dt>\n <dd class=\"truncate max-w-[65%]\">{{ user()?.email ?? '\u2014' }}</dd>\n </div>\n </dl>\n\n <dl class=\"space-y-3 text-sm\">\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">lock</mat-icon> Password</dt>\n <dd class=\"truncate max-w-[65%]\">None</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">verified_user</mat-icon> 2-step auth</dt>\n <dd class=\"truncate max-w-[65%]\">\u2014</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">key</mat-icon> Passkey</dt>\n <dd class=\"truncate max-w-[65%]\">\u2014</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">event</mat-icon> User since</dt>\n <dd class=\"truncate max-w-[65%]\">{{ createdAtLabel() }}</dd>\n </div>\n </dl>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }] });
|
|
991
991
|
}
|
|
992
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
992
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: UserDetailComponent, decorators: [{
|
|
993
993
|
type: Component,
|
|
994
994
|
args: [{ selector: 'rolatech-user-detail', imports: [CommonModule, MatTabsModule, ToolbarComponent, MatButtonModule, MatIcon, MatMenuModule], template: "<rolatech-toolbar title=\"Users\" link=\"../\"> </rolatech-toolbar>\n<div class=\"p-4 space-y-4\">\n <!-- Header -->\n <div class=\"flex items-start justify-between gap-4\">\n <div class=\"flex items-start gap-3 min-w-0\">\n <!-- avatar -->\n <div class=\"relative\">\n @if (avatarUrl()) {\n <img class=\"w-12 h-12 rounded-full object-cover border\" [src]=\"avatarUrl()!\" alt=\"avatar\" />\n } @else {\n <div\n class=\"w-12 h-12 rounded-full border bg-[--rt-brand-color] text-white flex items-center justify-center font-semibold\"\n >\n {{ initials() }}\n </div>\n }\n\n <!-- status dot -->\n <span\n class=\"absolute -right-0 -bottom-0 w-3 h-3 rounded-full border border-[--rt-border-color] bg-[--rt-base-background] flex items-center justify-center\"\n >\n <span\n class=\"w-2 h-2 rounded-full\"\n [class]=\"\n user()?.status?.toString() === 'ACTIVE'\n ? 'bg-green-500'\n : user()?.status?.toString() === 'LOCKED'\n ? 'bg-red-500'\n : 'bg-amber-500'\n \"\n ></span>\n </span>\n </div>\n\n <div class=\"min-w-0\">\n <div class=\"flex items-center gap-2 min-w-0\">\n <h1 class=\"text-2xl font-semibold truncate\">{{ name() }}</h1>\n\n @if (user()?.status?.toString() === 'LOCKED') {\n <span class=\"px-2 py-0.5 rounded-md text-xs bg-red-500/10 text-red-700 border border-red-500/20\">\n <mat-icon class=\"align-middle !text-[14px] mr-1\">lock</mat-icon>\n Locked\n </span>\n } @else if (user()?.status?.toString() === 'DISABLED') {\n <span class=\"px-2 py-0.5 rounded-md text-xs bg-red-500/10 text-red-700 border border-red-500/20\"> Disabled </span>\n }\n </div>\n\n <div class=\"text-sm opacity-70 flex items-center gap-2 mt-1\">\n <span>{{ user()?.status?.toString() === 'ACTIVE' ? 'Active' : (user()?.status ?? '\u2014') }}</span>\n </div>\n </div>\n </div>\n\n <!-- actions -->\n <!-- <div class=\"flex items-center gap-2\">\n <button mat-stroked-button (click)=\"openUserObject()\">User object</button>\n <button mat-flat-button color=\"primary\" (click)=\"editProfile()\">Edit profile</button>\n\n <button mat-icon-button [matMenuTriggerFor]=\"moreMenu\" aria-label=\"More\">\n <mat-icon>more_horiz</mat-icon>\n </button>\n <mat-menu #moreMenu=\"matMenu\">\n <button mat-menu-item (click)=\"toggleStatus()\">\n <mat-icon>{{ user()?.status?.toString() === 'ACTIVE' ? 'block' : 'check_circle' }}</mat-icon>\n <span>{{ user()?.status?.toString() === 'ACTIVE' ? 'Disable' : 'Enable' }}</span>\n </button>\n <button mat-menu-item (click)=\"resetPassword()\">\n <mat-icon>vpn_key</mat-icon>\n <span>Reset password</span>\n </button>\n <button mat-menu-item (click)=\"copyId()\">\n <mat-icon>content_copy</mat-icon>\n <span>Copy user ID</span>\n </button>\n </mat-menu>\n </div> -->\n </div>\n\n <!-- Info strip (2 columns like screenshot) -->\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-6 border-b pb-5\">\n <dl class=\"space-y-3 text-sm\">\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">badge</mat-icon> User ID</dt>\n <dd class=\"font-mono text-xs truncate max-w-[65%]\">{{ user()?.id }}</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">alternate_email</mat-icon> Username</dt>\n <dd class=\"truncate max-w-[65%]\">@{{ user()?.username }}</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">call</mat-icon> Phone number</dt>\n <dd class=\"truncate max-w-[65%]\">{{ user()?.phone ?? '\u2014' }}</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">mail</mat-icon> Email address</dt>\n <dd class=\"truncate max-w-[65%]\">{{ user()?.email ?? '\u2014' }}</dd>\n </div>\n </dl>\n\n <dl class=\"space-y-3 text-sm\">\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">lock</mat-icon> Password</dt>\n <dd class=\"truncate max-w-[65%]\">None</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">verified_user</mat-icon> 2-step auth</dt>\n <dd class=\"truncate max-w-[65%]\">\u2014</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">key</mat-icon> Passkey</dt>\n <dd class=\"truncate max-w-[65%]\">\u2014</dd>\n </div>\n\n <div class=\"flex items-center justify-between gap-3\">\n <dt class=\"flex items-center gap-2 opacity-70\"><mat-icon class=\"!text-base\">event</mat-icon> User since</dt>\n <dd class=\"truncate max-w-[65%]\">{{ createdAtLabel() }}</dd>\n </div>\n </dl>\n </div>\n</div>\n" }]
|
|
995
995
|
}] });
|