도메인 설정 page 추가
This commit is contained in:
		
							parent
							
								
									6fab831ef5
								
							
						
					
					
						commit
						8f57de6952
					
				| @ -354,6 +354,13 @@ export const appRoutes: Route[] = [ | |||||||
|                 'app/modules/admin/settings/indexing/indexing.module' |                 'app/modules/admin/settings/indexing/indexing.module' | ||||||
|               ).then((m: any) => m.IndexingModule), |               ).then((m: any) => m.IndexingModule), | ||||||
|           }, |           }, | ||||||
|  |           { | ||||||
|  |             path: 'domain', | ||||||
|  |             loadChildren: () => | ||||||
|  |               import('app/modules/admin/settings/domain/domain.module').then( | ||||||
|  |                 (m: any) => m.DomainModule | ||||||
|  |               ), | ||||||
|  |           }, | ||||||
|         ], |         ], | ||||||
|       }, |       }, | ||||||
|       { |       { | ||||||
|  | |||||||
							
								
								
									
										73
									
								
								src/app/mock-api/apps/settings/domain/api.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								src/app/mock-api/apps/settings/domain/api.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,73 @@ | |||||||
|  | import { Injectable } from '@angular/core'; | ||||||
|  | import { assign, cloneDeep } from 'lodash-es'; | ||||||
|  | import { FuseMockApiService, FuseMockApiUtils } from '@fuse/lib/mock-api'; | ||||||
|  | import { domainSetting as domainSettingData } from './data'; | ||||||
|  | 
 | ||||||
|  | @Injectable({ | ||||||
|  |   providedIn: 'root', | ||||||
|  | }) | ||||||
|  | export class DomainSettingMockApi { | ||||||
|  |   private _domainSetting: any = domainSettingData; | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Constructor | ||||||
|  |    */ | ||||||
|  |   constructor(private _fuseMockApiService: FuseMockApiService) { | ||||||
|  |     // Register Mock API handlers
 | ||||||
|  |     this.registerHandlers(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |   // @ Public methods
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Register Mock API handlers | ||||||
|  |    */ | ||||||
|  |   registerHandlers(): void { | ||||||
|  |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |     // @ BasicSetting - GET
 | ||||||
|  |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |     this._fuseMockApiService | ||||||
|  |       .onGet('api/apps/settings/domain', 300) | ||||||
|  |       .reply(({ request }) => { | ||||||
|  |         // Clone the deposits
 | ||||||
|  |         let domainSetting: any | null = cloneDeep(this._domainSetting); | ||||||
|  | 
 | ||||||
|  |         // Return the response
 | ||||||
|  |         return [ | ||||||
|  |           200, | ||||||
|  |           { | ||||||
|  |             domainSetting, | ||||||
|  |           }, | ||||||
|  |         ]; | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |     // @ BasicSetting - PATCH
 | ||||||
|  |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |     this._fuseMockApiService | ||||||
|  |       .onPatch('api/apps/settings/domain') | ||||||
|  |       .reply(({ request }) => { | ||||||
|  |         // Get the id and deposit
 | ||||||
|  |         const domainSetting = cloneDeep(request.body.domainSetting); | ||||||
|  | 
 | ||||||
|  |         // Prepare the updated basicSetting
 | ||||||
|  |         let updatedBasicSetting = null; | ||||||
|  | 
 | ||||||
|  |         // Find the deposit and update it
 | ||||||
|  |         // this._basicSetting.forEach((item, index, bs) => {
 | ||||||
|  |         //   if (item.id === id) {
 | ||||||
|  |         //     // Update the deposit
 | ||||||
|  |         //     basicSetting[index] = assign({}, basicSetting[index], deposit);
 | ||||||
|  | 
 | ||||||
|  |         //     // Store the updated deposit
 | ||||||
|  |         //     updatedDeposit = deposits[index];
 | ||||||
|  |         //   }
 | ||||||
|  |         // });
 | ||||||
|  | 
 | ||||||
|  |         // Return the response
 | ||||||
|  |         return [200, domainSetting]; | ||||||
|  |       }); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								src/app/mock-api/apps/settings/domain/data.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/app/mock-api/apps/settings/domain/data.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | /* eslint-disable */ | ||||||
|  | 
 | ||||||
|  | export const domainSetting = { | ||||||
|  |   domain: [ | ||||||
|  |     { | ||||||
|  |       idx: '4', | ||||||
|  |       domain: 'nsky-8989.com', | ||||||
|  |       designFolder: 'NEW-SKY', | ||||||
|  |       siteName: '뉴스카이', | ||||||
|  |       expiryDate: '2023-06-29', | ||||||
|  |       periodOfUse: '328일', | ||||||
|  |       memo: '', | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       idx: '3', | ||||||
|  |       domain: 'nsky-3040', | ||||||
|  |       designFolder: 'NEW-SKY', | ||||||
|  |       siteName: '뉴스카이', | ||||||
|  |       expiryDate: '2023-05-05', | ||||||
|  |       periodOfUse: '273일', | ||||||
|  |       memo: '미사용', | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       idx: '2', | ||||||
|  |       domain: 'nsky-5858.com', | ||||||
|  |       designFolder: 'NEW-SKY', | ||||||
|  |       siteName: '뉴스카이', | ||||||
|  |       expiryDate: '2023-05-05', | ||||||
|  |       periodOfUse: '273일', | ||||||
|  |       memo: '조치원라인', | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       idx: '1', | ||||||
|  |       domain: 'nsky-9988.com', | ||||||
|  |       designFolder: 'NEW-SKY', | ||||||
|  |       siteName: '뉴스카이', | ||||||
|  |       expiryDate: '2023-05-04', | ||||||
|  |       periodOfUse: '272일', | ||||||
|  |       memo: '', | ||||||
|  |     }, | ||||||
|  |   ], | ||||||
|  |   bota: [ | ||||||
|  |     { | ||||||
|  |       domain: '.', | ||||||
|  |       designFolder: '.', | ||||||
|  |       siteName: '.', | ||||||
|  |       expiryDate: '.', | ||||||
|  |       periodOfUse: '.', | ||||||
|  |       memo: '.', | ||||||
|  |     }, | ||||||
|  |   ], | ||||||
|  | }; | ||||||
| @ -453,6 +453,13 @@ export const defaultNavigation: FuseNavigationItem[] = [ | |||||||
|         icon: 'heroicons_outline:cog', |         icon: 'heroicons_outline:cog', | ||||||
|         link: '/settings/indexing', |         link: '/settings/indexing', | ||||||
|       }, |       }, | ||||||
|  |       { | ||||||
|  |         id: 'settings.domain', | ||||||
|  |         title: 'Domain-Setting', | ||||||
|  |         type: 'basic', | ||||||
|  |         icon: 'heroicons_outline:cog', | ||||||
|  |         link: '/settings/domain', | ||||||
|  |       }, | ||||||
|     ], |     ], | ||||||
|   }, |   }, | ||||||
| ]; | ]; | ||||||
|  | |||||||
| @ -49,6 +49,7 @@ import { EvoSettingMockApi } from './apps/settings/evo/api'; | |||||||
| import { GameSettingMockApi } from './apps/settings/game/api'; | import { GameSettingMockApi } from './apps/settings/game/api'; | ||||||
| import { LadderSettingMockApi } from './apps/settings/ladder/api'; | import { LadderSettingMockApi } from './apps/settings/ladder/api'; | ||||||
| import { IndexingSettingMockApi } from './apps/settings/indexing/api'; | import { IndexingSettingMockApi } from './apps/settings/indexing/api'; | ||||||
|  | import { DomainSettingMockApi } from './apps/settings/domain/api'; | ||||||
| import { ReportDailyMockApi } from './apps/report/daily/api'; | import { ReportDailyMockApi } from './apps/report/daily/api'; | ||||||
| import { ReportMonthlyMockApi } from './apps/report/monthly/api'; | import { ReportMonthlyMockApi } from './apps/report/monthly/api'; | ||||||
| import { ReportDailyPartnerMockApi } from './apps/report/daily-partner/api'; | import { ReportDailyPartnerMockApi } from './apps/report/daily-partner/api'; | ||||||
| @ -122,6 +123,7 @@ export const mockApiServices = [ | |||||||
|   GameSettingMockApi, |   GameSettingMockApi, | ||||||
|   LadderSettingMockApi, |   LadderSettingMockApi, | ||||||
|   IndexingSettingMockApi, |   IndexingSettingMockApi, | ||||||
|  |   DomainSettingMockApi, | ||||||
|   ReportDailyMockApi, |   ReportDailyMockApi, | ||||||
|   ReportMonthlyMockApi, |   ReportMonthlyMockApi, | ||||||
|   ReportDailyPartnerMockApi, |   ReportDailyPartnerMockApi, | ||||||
|  | |||||||
| @ -0,0 +1,3 @@ | |||||||
|  | import { ListComponent } from './list.component'; | ||||||
|  | 
 | ||||||
|  | export const COMPONENTS = [ListComponent]; | ||||||
| @ -0,0 +1,169 @@ | |||||||
|  | <div class="flex flex-col flex-auto min-w-0"> | ||||||
|  |   <div class="flex-auto border-t -mt-px pt-4 sm:pt-6"> | ||||||
|  |     <div class="w-full max-w-screen-xl mx-auto"> | ||||||
|  |       <div class="grid grid-cols-1 sm:grid-cols-6 gap-6 w-full min-w-0"> | ||||||
|  |         <!-- Budget distribution --> | ||||||
|  |         <div | ||||||
|  |           class="sm:col-span-6 flex flex-col flex-auto p-6 bg-card shadow rounded-2xl overflow-hidden" | ||||||
|  |         > | ||||||
|  |           <div class="text-lg font-medium tracking-tight leading-6 truncate"> | ||||||
|  |             도메인 관리 | ||||||
|  |           </div> | ||||||
|  |           <div class="flex flex-col flex-auto mt-2 overflow-x-auto"> | ||||||
|  |             <table | ||||||
|  |               class="min-w-240 overflow-y-visible" | ||||||
|  |               mat-table | ||||||
|  |               [dataSource]="domainSettingDataSource" | ||||||
|  |             > | ||||||
|  |               <!-- Index --> | ||||||
|  |               <ng-container matColumnDef="idx"> | ||||||
|  |                 <th mat-header-cell *matHeaderCellDef>번호</th> | ||||||
|  |                 <td mat-cell *matCellDef="let info"> | ||||||
|  |                   <span class="font-medium text-right"> | ||||||
|  |                     {{ info.idx }} | ||||||
|  |                   </span> | ||||||
|  |                 </td> | ||||||
|  |               </ng-container> | ||||||
|  | 
 | ||||||
|  |               <!-- Domain --> | ||||||
|  |               <ng-container matColumnDef="domain"> | ||||||
|  |                 <th mat-header-cell *matHeaderCellDef>도메인</th> | ||||||
|  |                 <td mat-cell *matCellDef="let info"> | ||||||
|  |                   <span class="font-medium text-right"> | ||||||
|  |                     {{ info.domain }} | ||||||
|  |                   </span> | ||||||
|  |                 </td> | ||||||
|  |               </ng-container> | ||||||
|  | 
 | ||||||
|  |               <!-- Design folder --> | ||||||
|  |               <ng-container matColumnDef="designFolder"> | ||||||
|  |                 <th mat-header-cell *matHeaderCellDef>디자인 폴더</th> | ||||||
|  |                 <td mat-cell *matCellDef="let info"> | ||||||
|  |                   <span class="font-medium text-right"> | ||||||
|  |                     {{ info.designFolder }} | ||||||
|  |                   </span> | ||||||
|  |                 </td> | ||||||
|  |               </ng-container> | ||||||
|  | 
 | ||||||
|  |               <!-- Site name --> | ||||||
|  |               <ng-container matColumnDef="siteName"> | ||||||
|  |                 <th mat-header-cell *matHeaderCellDef>사이트명</th> | ||||||
|  |                 <td mat-cell *matCellDef="let info"> | ||||||
|  |                   <span class="font-medium text-right"> | ||||||
|  |                     {{ info.siteName }} | ||||||
|  |                   </span> | ||||||
|  |                 </td> | ||||||
|  |               </ng-container> | ||||||
|  | 
 | ||||||
|  |               <!-- Expiry date --> | ||||||
|  |               <ng-container matColumnDef="expiryDate"> | ||||||
|  |                 <th mat-header-cell *matHeaderCellDef>만료일</th> | ||||||
|  |                 <td mat-cell *matCellDef="let info"> | ||||||
|  |                   <span class="font-medium text-right"> | ||||||
|  |                     {{ info.expiryDate }} | ||||||
|  |                   </span> | ||||||
|  |                 </td> | ||||||
|  |               </ng-container> | ||||||
|  | 
 | ||||||
|  |               <!-- Period of use --> | ||||||
|  |               <ng-container matColumnDef="periodOfUse"> | ||||||
|  |                 <th mat-header-cell *matHeaderCellDef>남은 기간</th> | ||||||
|  |                 <td mat-cell *matCellDef="let info"> | ||||||
|  |                   <span class="font-medium text-right"> | ||||||
|  |                     {{ info.periodOfUse }} | ||||||
|  |                   </span> | ||||||
|  |                 </td> | ||||||
|  |               </ng-container> | ||||||
|  | 
 | ||||||
|  |               <!-- Memo --> | ||||||
|  |               <ng-container matColumnDef="memo"> | ||||||
|  |                 <th mat-header-cell *matHeaderCellDef>메모</th> | ||||||
|  |                 <td mat-cell *matCellDef="let info"> | ||||||
|  |                   <mat-form-field class=""> | ||||||
|  |                     <input id="memo" matInput value="{{ info.memo }}" /> | ||||||
|  |                   </mat-form-field> | ||||||
|  |                   <button mat-flat-button [color]="'primary'">수정</button> | ||||||
|  |                 </td> | ||||||
|  |               </ng-container> | ||||||
|  | 
 | ||||||
|  |               <!-- Delete button --> | ||||||
|  |               <ng-container matColumnDef="deleteBtn"> | ||||||
|  |                 <th mat-header-cell *matHeaderCellDef>도메인 삭제</th> | ||||||
|  |                 <td mat-cell *matCellDef="let basicSetting"> | ||||||
|  |                   <div class="hidden sm:block truncate"> | ||||||
|  |                     <button mat-flat-button [color]="'primary'"> | ||||||
|  |                       도메인삭제 | ||||||
|  |                     </button> | ||||||
|  |                   </div> | ||||||
|  |                 </td> | ||||||
|  |               </ng-container> | ||||||
|  | 
 | ||||||
|  |               <tr | ||||||
|  |                 mat-header-row | ||||||
|  |                 *matHeaderRowDef="domainSettingTableColumns" | ||||||
|  |               ></tr> | ||||||
|  |               <tr | ||||||
|  |                 mat-row | ||||||
|  |                 *matRowDef="let row; columns: domainSettingTableColumns" | ||||||
|  |               ></tr> | ||||||
|  |             </table> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |         <!-- Budget details --> | ||||||
|  |         <div | ||||||
|  |           class="sm:col-span-6 flex flex-col flex-auto p-6 bg-card shadow rounded-2xl overflow-hidden" | ||||||
|  |         > | ||||||
|  |           <div class="text-lg font-medium tracking-tight leading-6 truncate"> | ||||||
|  |             도메인 등록 | ||||||
|  |           </div> | ||||||
|  |           <div> | ||||||
|  |             <table class="min-w-240 overflow-y-visible"> | ||||||
|  |               <tr> | ||||||
|  |                 <th>도메인(필수)</th> | ||||||
|  |                 <th>디자인 폴더(옵션)</th> | ||||||
|  |                 <th>사이트명(옵션)</th> | ||||||
|  |                 <th>만료일(옵션)</th> | ||||||
|  |                 <th>메모(옵션)</th> | ||||||
|  |                 <th>도메인 등록</th> | ||||||
|  |               </tr> | ||||||
|  |               <tr> | ||||||
|  |                 <td> | ||||||
|  |                   <mat-form-field> | ||||||
|  |                     <input id="domain" matInput | ||||||
|  |                   /></mat-form-field> | ||||||
|  |                 </td> | ||||||
|  |                 <td> | ||||||
|  |                   <mat-form-field> | ||||||
|  |                     <input id="designFolder" matInput | ||||||
|  |                   /></mat-form-field> | ||||||
|  |                 </td> | ||||||
|  |                 <td> | ||||||
|  |                   <mat-form-field> | ||||||
|  |                     <input id="siteName" matInput /> | ||||||
|  |                   </mat-form-field> | ||||||
|  |                 </td> | ||||||
|  |                 <td> | ||||||
|  |                   <mat-form-field> | ||||||
|  |                     <input id="expiryDate" matInput /> | ||||||
|  |                   </mat-form-field> | ||||||
|  |                 </td> | ||||||
|  |                 <td> | ||||||
|  |                   <mat-form-field> | ||||||
|  |                     <input id="memo" matInput /> | ||||||
|  |                   </mat-form-field> | ||||||
|  |                 </td> | ||||||
|  |                 <td> | ||||||
|  |                   <div class="hidden sm:block truncate"> | ||||||
|  |                     <button mat-flat-button [color]="'primary'"> | ||||||
|  |                       도메인등록 | ||||||
|  |                     </button> | ||||||
|  |                   </div> | ||||||
|  |                 </td> | ||||||
|  |               </tr> | ||||||
|  |             </table> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </div> | ||||||
| @ -0,0 +1,164 @@ | |||||||
|  | import { | ||||||
|  |   AfterViewInit, | ||||||
|  |   ChangeDetectionStrategy, | ||||||
|  |   ChangeDetectorRef, | ||||||
|  |   Component, | ||||||
|  |   OnDestroy, | ||||||
|  |   OnInit, | ||||||
|  |   ViewChild, | ||||||
|  |   ViewEncapsulation, | ||||||
|  | } from '@angular/core'; | ||||||
|  | import { | ||||||
|  |   FormBuilder, | ||||||
|  |   FormControl, | ||||||
|  |   FormGroup, | ||||||
|  |   Validators, | ||||||
|  | } from '@angular/forms'; | ||||||
|  | 
 | ||||||
|  | import { MatTableDataSource } from '@angular/material/table'; | ||||||
|  | import { MatPaginator } from '@angular/material/paginator'; | ||||||
|  | import { MatSort } from '@angular/material/sort'; | ||||||
|  | import { | ||||||
|  |   debounceTime, | ||||||
|  |   map, | ||||||
|  |   merge, | ||||||
|  |   Observable, | ||||||
|  |   Subject, | ||||||
|  |   switchMap, | ||||||
|  |   takeUntil, | ||||||
|  | } from 'rxjs'; | ||||||
|  | import { fuseAnimations } from '@fuse/animations'; | ||||||
|  | import { FuseConfirmationService } from '@fuse/services/confirmation'; | ||||||
|  | import { DomainService } from '../services/domain.service'; | ||||||
|  | import { MatSelectChange } from '@angular/material/select'; | ||||||
|  | 
 | ||||||
|  | @Component({ | ||||||
|  |   selector: 'settings-domain-list', | ||||||
|  |   templateUrl: './list.component.html', | ||||||
|  |   styles: [ | ||||||
|  |     /* language=SCSS */ | ||||||
|  |     ` | ||||||
|  |       .settings-domain-grid { | ||||||
|  |         grid-template-columns: 60px auto 40px; | ||||||
|  | 
 | ||||||
|  |         @screen sm { | ||||||
|  |           grid-template-columns: 60px auto 60px 72px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         @screen md { | ||||||
|  |           grid-template-columns: 60px 60px auto 112px 72px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         @screen lg { | ||||||
|  |           grid-template-columns: 60px 60px auto 112px 96px 96px 72px; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     `,
 | ||||||
|  |   ], | ||||||
|  |   encapsulation: ViewEncapsulation.None, | ||||||
|  |   changeDetection: ChangeDetectionStrategy.OnPush, | ||||||
|  |   animations: fuseAnimations, | ||||||
|  | }) | ||||||
|  | export class ListComponent implements OnInit, AfterViewInit, OnDestroy { | ||||||
|  |   @ViewChild(MatPaginator) private _paginator!: MatPaginator; | ||||||
|  |   @ViewChild(MatSort) private _sort!: MatSort; | ||||||
|  | 
 | ||||||
|  |   domainSettingTableColumns: string[] = [ | ||||||
|  |     'idx', | ||||||
|  |     'domain', | ||||||
|  |     'designFolder', | ||||||
|  |     'siteName', | ||||||
|  |     'expiryDate', | ||||||
|  |     'periodOfUse', | ||||||
|  |     'memo', | ||||||
|  |     'deleteBtn', | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   domainRegistrationTableColumns: string[] = [ | ||||||
|  |     'domain', | ||||||
|  |     'designFolder', | ||||||
|  |     'siteName', | ||||||
|  |     'expiryDate', | ||||||
|  |     'memo', | ||||||
|  |     'updateBtn', | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   domainSettingDataSource: MatTableDataSource<any> = new MatTableDataSource(); | ||||||
|  |   domainRegistrationDataSource: MatTableDataSource<any> = | ||||||
|  |     new MatTableDataSource(); | ||||||
|  | 
 | ||||||
|  |   private _unsubscribeAll: Subject<any> = new Subject<any>(); | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Constructor | ||||||
|  |    */ | ||||||
|  |   constructor( | ||||||
|  |     private _changeDetectorRef: ChangeDetectorRef, | ||||||
|  |     private _fuseConfirmationService: FuseConfirmationService, | ||||||
|  |     private _formBuilder: FormBuilder, | ||||||
|  |     private _domainService: DomainService | ||||||
|  |   ) {} | ||||||
|  | 
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |   // @ Lifecycle hooks
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * On init | ||||||
|  |    */ | ||||||
|  |   ngOnInit(): void { | ||||||
|  |     // Get the products
 | ||||||
|  |     this._domainService.domainSetting$ | ||||||
|  |       .pipe(takeUntil(this._unsubscribeAll)) | ||||||
|  |       .subscribe((domainSetting: any | undefined) => { | ||||||
|  |         this.domainSettingDataSource = domainSetting.domain; | ||||||
|  |         this.domainRegistrationDataSource = domainSetting.bota; | ||||||
|  |         // Mark for check
 | ||||||
|  |         this._changeDetectorRef.markForCheck(); | ||||||
|  |       }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * After view init | ||||||
|  |    */ | ||||||
|  |   ngAfterViewInit(): void {} | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * On destroy | ||||||
|  |    */ | ||||||
|  |   ngOnDestroy(): void { | ||||||
|  |     // Unsubscribe from all subscriptions
 | ||||||
|  |     this._unsubscribeAll.next(null); | ||||||
|  |     this._unsubscribeAll.complete(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |   // @ Public methods
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |   // @ Private methods
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Create product | ||||||
|  |    */ | ||||||
|  |   __createProduct(): void {} | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Toggle product details | ||||||
|  |    * | ||||||
|  |    * @param productId | ||||||
|  |    */ | ||||||
|  |   __toggleDetails(productId: string): void {} | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Track by function for ngFor loops | ||||||
|  |    * | ||||||
|  |    * @param index | ||||||
|  |    * @param item | ||||||
|  |    */ | ||||||
|  |   __trackByFn(index: number, item: any): any { | ||||||
|  |     return item.id || index; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										44
									
								
								src/app/modules/admin/settings/domain/domain.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/app/modules/admin/settings/domain/domain.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | |||||||
|  | import { NgModule } from '@angular/core'; | ||||||
|  | import { RouterModule } from '@angular/router'; | ||||||
|  | 
 | ||||||
|  | import { MatButtonModule } from '@angular/material/button'; | ||||||
|  | import { MatFormFieldModule } from '@angular/material/form-field'; | ||||||
|  | import { MatIconModule } from '@angular/material/icon'; | ||||||
|  | import { MatInputModule } from '@angular/material/input'; | ||||||
|  | import { MatPaginatorModule } from '@angular/material/paginator'; | ||||||
|  | import { MatProgressBarModule } from '@angular/material/progress-bar'; | ||||||
|  | import { MatRippleModule } from '@angular/material/core'; | ||||||
|  | import { MatSortModule } from '@angular/material/sort'; | ||||||
|  | import { MatSelectModule } from '@angular/material/select'; | ||||||
|  | import { MatTooltipModule } from '@angular/material/tooltip'; | ||||||
|  | import { MatTableModule } from '@angular/material/table'; | ||||||
|  | 
 | ||||||
|  | import { TranslocoModule } from '@ngneat/transloco'; | ||||||
|  | 
 | ||||||
|  | import { SharedModule } from 'app/shared/shared.module'; | ||||||
|  | 
 | ||||||
|  | import { COMPONENTS } from './components'; | ||||||
|  | 
 | ||||||
|  | import { domainRoutes } from './domain.routing'; | ||||||
|  | 
 | ||||||
|  | @NgModule({ | ||||||
|  |   declarations: [COMPONENTS], | ||||||
|  |   imports: [ | ||||||
|  |     TranslocoModule, | ||||||
|  |     SharedModule, | ||||||
|  |     RouterModule.forChild(domainRoutes), | ||||||
|  | 
 | ||||||
|  |     MatButtonModule, | ||||||
|  |     MatFormFieldModule, | ||||||
|  |     MatIconModule, | ||||||
|  |     MatInputModule, | ||||||
|  |     MatPaginatorModule, | ||||||
|  |     MatProgressBarModule, | ||||||
|  |     MatRippleModule, | ||||||
|  |     MatSortModule, | ||||||
|  |     MatSelectModule, | ||||||
|  |     MatTooltipModule, | ||||||
|  |     MatTableModule, | ||||||
|  |   ], | ||||||
|  | }) | ||||||
|  | export class DomainModule {} | ||||||
							
								
								
									
										15
									
								
								src/app/modules/admin/settings/domain/domain.routing.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/app/modules/admin/settings/domain/domain.routing.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | import { Route } from '@angular/router'; | ||||||
|  | 
 | ||||||
|  | import { ListComponent } from './components/list.component'; | ||||||
|  | 
 | ||||||
|  | import { DomainResolver } from './resolvers/domain.resolver'; | ||||||
|  | 
 | ||||||
|  | export const domainRoutes: Route[] = [ | ||||||
|  |   { | ||||||
|  |     path: '', | ||||||
|  |     component: ListComponent, | ||||||
|  |     resolve: { | ||||||
|  |       domain: DomainResolver, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | ]; | ||||||
| @ -0,0 +1,39 @@ | |||||||
|  | import { Injectable } from '@angular/core'; | ||||||
|  | import { | ||||||
|  |   ActivatedRouteSnapshot, | ||||||
|  |   Resolve, | ||||||
|  |   Router, | ||||||
|  |   RouterStateSnapshot, | ||||||
|  | } from '@angular/router'; | ||||||
|  | import { catchError, Observable, throwError } from 'rxjs'; | ||||||
|  | 
 | ||||||
|  | import { DomainService } from '../services/domain.service'; | ||||||
|  | 
 | ||||||
|  | @Injectable({ | ||||||
|  |   providedIn: 'root', | ||||||
|  | }) | ||||||
|  | export class DomainResolver implements Resolve<any> { | ||||||
|  |   /** | ||||||
|  |    * Constructor | ||||||
|  |    */ | ||||||
|  |   constructor(private _domainService: DomainService) {} | ||||||
|  | 
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |   // @ Public methods
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Resolver | ||||||
|  |    * | ||||||
|  |    * @param route | ||||||
|  |    * @param state | ||||||
|  |    */ | ||||||
|  |   resolve( | ||||||
|  |     route: ActivatedRouteSnapshot, | ||||||
|  |     state: RouterStateSnapshot | ||||||
|  |   ): Observable<{ | ||||||
|  |     domainSetting: any; | ||||||
|  |   }> { | ||||||
|  |     return this._domainService.getDomainSetting(); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,58 @@ | |||||||
|  | import { Injectable } from '@angular/core'; | ||||||
|  | import { HttpClient } from '@angular/common/http'; | ||||||
|  | import { | ||||||
|  |   BehaviorSubject, | ||||||
|  |   filter, | ||||||
|  |   map, | ||||||
|  |   Observable, | ||||||
|  |   of, | ||||||
|  |   switchMap, | ||||||
|  |   take, | ||||||
|  |   tap, | ||||||
|  |   throwError, | ||||||
|  | } from 'rxjs'; | ||||||
|  | 
 | ||||||
|  | @Injectable({ | ||||||
|  |   providedIn: 'root', | ||||||
|  | }) | ||||||
|  | export class DomainService { | ||||||
|  |   // Private
 | ||||||
|  |   private __domainSetting = new BehaviorSubject<any | undefined>(undefined); | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Constructor | ||||||
|  |    */ | ||||||
|  |   constructor(private _httpClient: HttpClient) {} | ||||||
|  | 
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |   // @ Accessors
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Getter for game | ||||||
|  |    */ | ||||||
|  |   get domainSetting$(): Observable<any | undefined> { | ||||||
|  |     return this.__domainSetting.asObservable(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |   // @ Public methods
 | ||||||
|  |   // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Get powerballs | ||||||
|  |    * | ||||||
|  |    * | ||||||
|  |    */ | ||||||
|  |   getDomainSetting(): Observable<{ | ||||||
|  |     domainSetting: any; | ||||||
|  |   }> { | ||||||
|  |     return this._httpClient | ||||||
|  |       .get<{ domainSetting: any }>('api/apps/settings/domain') | ||||||
|  |       .pipe( | ||||||
|  |         tap((response) => { | ||||||
|  |           this.__domainSetting.next(response.domainSetting); | ||||||
|  |         }) | ||||||
|  |       ); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -28,6 +28,13 @@ | |||||||
|   "Evolution": "Evolution", |   "Evolution": "Evolution", | ||||||
|   "Slot": "Slot", |   "Slot": "Slot", | ||||||
|   "Current User": "Current User", |   "Current User": "Current User", | ||||||
|  |   "Basic-Setting": "Basic-Setting", | ||||||
|  |   "Ladder-Setting": "Ladder-Setting", | ||||||
|  |   "Game-Setting": "Game-Setting", | ||||||
|  |   "Evo-Setting": "Evo-Setting", | ||||||
|  |   "Branch-Setting": "Branch-Setting", | ||||||
|  |   "Indexing-Setting": "Indexing-Setting", | ||||||
|  |   "Domain-Setting": "Domain-Setting", | ||||||
|   "Daily": "Daily", |   "Daily": "Daily", | ||||||
|   "Monthly": "Monthly", |   "Monthly": "Monthly", | ||||||
|   "Daily Partner": "Daily Partner", |   "Daily Partner": "Daily Partner", | ||||||
|  | |||||||
| @ -34,6 +34,7 @@ | |||||||
|   "Evo-Setting": "에볼류션/보타 금액설정", |   "Evo-Setting": "에볼류션/보타 금액설정", | ||||||
|   "Branch-Setting": "대본벌 계좌 설정", |   "Branch-Setting": "대본벌 계좌 설정", | ||||||
|   "Indexing-Setting": "서버 인덱싱", |   "Indexing-Setting": "서버 인덱싱", | ||||||
|  |   "Domain-Setting": "도메인 설정", | ||||||
|   "Daily": "일일현황", |   "Daily": "일일현황", | ||||||
|   "Monthly": "월 현황", |   "Monthly": "월 현황", | ||||||
|   "report-management": "보고서관리", |   "report-management": "보고서관리", | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user