UNPKG

catng

Version:

Angular Dynamic Form Input Component

1 lines 372 kB
{"version":3,"file":"catng.mjs","sources":["../../../projects/catng/src/lib/models/apipaths.model.ts","../../../projects/catng/src/lib/models/filter-page-sort.model.ts","../../../projects/catng/src/lib/models/formparameter.model.ts","../../../projects/catng/src/lib/enums/comp.enum.ts","../../../projects/catng/src/lib/enums/icon.enum.ts","../../../projects/catng/src/lib/enums/input-type.enum.ts","../../../projects/catng/src/lib/enums/message-status-type.enum.ts","../../../projects/catng/src/lib/enums/submit-type.enum.ts","../../../projects/catng/src/lib/enums/file-show-type.enum.ts","../../../projects/catng/src/lib/models/form.model.ts","../../../projects/catng/src/lib/models/response.model.ts","../../../projects/catng/src/lib/models/app.config.ts","../../../projects/catng/src/lib/models/input-control-command.model.ts","../../../projects/catng/src/lib/models/list-options.model.ts","../../../projects/catng/src/lib/models/column.model.ts","../../../projects/catng/src/lib/services/jwthelper.service.ts","../../../projects/catng/src/lib/services/global.service.ts","../../../projects/catng/src/lib/services/base.service.ts","../../../projects/catng/src/lib/services/loading.service.ts","../../../projects/catng/src/lib/services/dynamic-form-page.service.ts","../../../projects/catng/src/lib/components/base.component.ts","../../../projects/catng/src/lib/components/filter-page-sort.component.ts","../../../projects/catng/src/lib/components/base-list.component.ts","../../../projects/catng/src/lib/components/file-control/file-control.component.ts","../../../projects/catng/src/lib/components/file-control/file-control.component.html","../../../projects/catng/src/lib/components/base-form.component.ts","../../../projects/catng/src/lib/components/input-control/input-control.component.ts","../../../projects/catng/src/lib/components/input-control/input-control.component.html","../../../projects/catng/src/lib/components/input-form-control/input-form-control.component.ts","../../../projects/catng/src/lib/components/input-form-control/input-form-control.component.html","../../../projects/catng/src/lib/components/dynamic-form/dynamic-form.component.ts","../../../projects/catng/src/lib/components/dynamic-form/dynamic-form.component.html","../../../projects/catng/src/lib/components/dynamic-form-page/dynamic-form-page.component.ts","../../../projects/catng/src/lib/components/dynamic-form-page/dynamic-form-page.component.html","../../../projects/catng/src/lib/pipes/auth-image.pipe.ts","../../../projects/catng/src/lib/pipes/contact.pipe.ts","../../../projects/catng/src/lib/pipes/phone.pipe.ts","../../../projects/catng/src/lib/pipes/cat-date.pipe.ts","../../../projects/catng/src/lib/components/dynamic-list/dynamic-columns/dynamic-columns.component.ts","../../../projects/catng/src/lib/components/dynamic-list/dynamic-columns/dynamic-columns.component.html","../../../projects/catng/src/lib/components/dynamic-list/dynamic-list.component.ts","../../../projects/catng/src/lib/components/dynamic-list/dynamic-list.component.html","../../../projects/catng/src/lib/services/dynamic-list-page.service.ts","../../../projects/catng/src/lib/components/dynamic-list-page/dynamic-list-page.component.ts","../../../projects/catng/src/lib/components/dynamic-list-page/dynamic-list-page.component.html","../../../projects/catng/src/lib/components/dialog/dialog.component.ts","../../../projects/catng/src/lib/components/dialog/dialog.component.html","../../../projects/catng/src/lib/components/toolbar/toolbar.component.ts","../../../projects/catng/src/lib/components/toolbar/toolbar.component.html","../../../projects/catng/src/lib/components/button/button/button.component.ts","../../../projects/catng/src/lib/components/button/button/button.component.html","../../../projects/catng/src/lib/components/button/select-button/select-button.component.ts","../../../projects/catng/src/lib/components/button/select-button/select-button.component.html","../../../projects/catng/src/lib/components/button/split-button/split-button.component.ts","../../../projects/catng/src/lib/components/button/split-button/split-button.component.html","../../../projects/catng/src/lib/components/confirm-toast/confirm-toast.component.ts","../../../projects/catng/src/lib/components/confirm-toast/confirm-toast.component.html","../../../projects/catng/src/lib/components/readonly-table/readonly-table.component.ts","../../../projects/catng/src/lib/components/readonly-table/readonly-table.component.html","../../../projects/catng/src/lib/components/readonly-details/readonly-details.component.ts","../../../projects/catng/src/lib/components/readonly-details/readonly-details.component.html","../../../projects/catng/src/lib/components/fieldset/fieldset.component.ts","../../../projects/catng/src/lib/components/fieldset/fieldset.component.html","../../../projects/catng/src/lib/components/sidebar/sidebar.component.ts","../../../projects/catng/src/lib/components/sidebar/sidebar.component.html","../../../projects/catng/src/lib/components/breadcrumb/breadcrumb.component.ts","../../../projects/catng/src/lib/components/breadcrumb/breadcrumb.component.html","../../../projects/catng/src/lib/components/tab/tab.component.ts","../../../projects/catng/src/lib/components/tab/tab.component.html","../../../projects/catng/src/lib/components/pdf-viewer/pdf-viewer.component.ts","../../../projects/catng/src/lib/components/pdf-viewer/pdf-viewer.component.html","../../../projects/catng/src/lib/interceptors/app-http.interceptor.ts","../../../projects/catng/src/lib/catng.service.ts","../../../projects/catng/src/lib/catng.component.ts","../../../projects/catng/src/public-api.ts","../../../projects/catng/src/catng.ts"],"sourcesContent":["export class ApiPaths {\r\n\r\n getUrl?: string;\r\n listUrl?: string;\r\n addUrl?: string;\r\n updateUrl?: string;\r\n deleteUrl?: string;\r\n\r\n\r\n\r\n // baseUrl?: string;\r\n // defaultUrl?: string;\r\n\r\n\r\n // ListByParentUrl?: string;\r\n // LookupUrl?: string;\r\n\r\n // SelfUrl?: string;\r\n // AddUrl?: string;\r\n // AddsUrl?: string;\r\n // UpdateUrl?: string;\r\n // UpdatesUrl?: string;\r\n\r\n // SaveUrl?: string;\r\n\r\n\r\n // PutUrl?: string;\r\n\r\n\r\n // PostUrl?: string;\r\n\r\n\r\n // DeleteUrl?: string;\r\n // DeletesUrl?: string;\r\n\r\n // GridListUrl?: string;\r\n // GridListByParentUrl?: string;\r\n\r\n // SearchUrl?: string;\r\n\r\n} ","export class Filter {\r\n\tfield?: string\r\n\tvalue?: string;\r\n\tmatchMode?: string;\r\n\tconstructor(field?: string, value?: string, matchMode?: string) {\r\n\t\tthis.field = field;\r\n\t\tthis.value = value;\r\n\t\tthis.matchMode = matchMode;\r\n\t}\r\n}\r\n\r\nexport class Sort {\r\n\tfield?: string;\r\n\torder?: number;\r\n}\r\n\r\nexport class FilterPageSort {\r\n\tfirst?: number = 0;\r\n\trows?: number = 15;\r\n\tfilter?: Filter[];\r\n\tsort?: Sort[];\r\n}\r\n","export class FormParameter {\r\n [x: string]: any;\r\n Id: any;\r\n Data: any;\r\n ParentId: any;\r\n //ParentItem:any;\r\n PrimaryKeyName: string = \"Id\";\r\n ParentIdPropertyName?: string;\r\n ResultProperty?: string;\r\n \r\n IsReactive:boolean=false;\r\n\r\n}","export enum Comp {\r\n dataType = 'string',\r\n dateFormat = 'dd.mm.yy',\r\n maxFileSize = 104857600,\r\n user = 'portalErisim',\r\n lsJwt = 'portalAT',\r\n lsRefresh = 'portalRT',\r\n lsLocale = 'portalLocale',\r\n lsSunucu = 'portalSunucu',\r\n}\r\n","export enum Icon {\r\n\tlogin = 'pi pi-sign-in',\r\n\tlogining = 'pi pi-spin pi-spinner',\r\n\tactions = 'pi pi-bars',\r\n\tlist = 'pi pi-list',\r\n\tedit = 'pi pi-pencil',\r\n\tsave = 'pi pi-check',\r\n\tnew = 'pi pi-file-o',\r\n\tassign = 'pi pi-forward',\r\n\tcheckc = 'pi pi-check-circle',\r\n\tchecks = 'pi pi-check-square',\r\n\tminusc = 'pi pi-minus-circle',\r\n\ttimesc = 'pi pi-times-circle',\r\n\ttimes = 'pi pi-times',\r\n\tlink = 'pi pi-external-link',\r\n\tfolder = 'pi pi-folder',\r\n\tfoldero = 'pi pi-folder-open',\r\n\tpdf = 'pi pi-file-pdf',\r\n\texcel = 'pi pi-file-excel',\r\n\tword = 'fas fa-file-word',\r\n\tsend = 'pi pi-send',\r\n}\r\n","export enum InputTypeEnum {\r\n\r\n readonly = \"readonly\",\r\n //form için elmanlar\r\n form = \"form\",\r\n row = \"row\",\r\n column = \"column\",\r\n card = \"card\",\r\n\r\n\r\n //inputlar\r\n number = \"number\",\r\n int = \"int\",\r\n decimal = \"decimal\",\r\n display = \"display\",\r\n currency = \"currency\",\r\n textbox = \"textbox\",\r\n treeselect = \"treeselect\",\r\n editor = \"editor\",\r\n dropdown = \"dropdown\",\r\n multidropdown = \"multidropdown\",\r\n multiselect = \"multiselect\",\r\n // boolean='boolean',\r\n checkbox = \"checkbox\",\r\n checkboxgroup = \"checkboxgroup\",\r\n date = \"date\",\r\n dateTime = \"datetime\",\r\n time = \"time\",\r\n radiobutton = \"radiobutton\",\r\n switchbutton = \"switchbutton\",\r\n radiogroup = \"radiogroup\",\r\n password = \"password\",\r\n picklist = \"picklist\",\r\n selection = \"selection\",\r\n routerlink = \"routerlink\",\r\n profilephoto = \"profilephoto\",\r\n userphoto = \"userphoto\",\r\n icon = \"icon\",\r\n mask = \"mask\",\r\n textarea = \"textarea\",\r\n email = \"email\",\r\n phone = \"phone\",\r\n alphabetic = \"alphabetic\",\r\n pnum = \"pnum\",\r\n chips = \"chips\",\r\n tree = \"tree\",\r\n fileupload = 'fileupload',\r\n autocomplete = 'autocomplete',\r\n longDate = 'longDate',\r\n shortDate = 'shortDate',\r\n innerHTML = 'innerHTML',\r\n link = \"link\",\r\n fileupload_yabancidil = \"fileupload_yabancidil\",\r\n contact = \"contact\",\r\n listitems = \"listitems\",\r\n yesNo = \"yesNo\", \r\n colorPicker = \"colorPicker\",\r\n rating = \"rating\",\r\n matrix = \"matrix\",\r\n tag = \"tag\",\r\n}\r\n\r\n","export enum MessageStatusType {\r\n success = 'success',\r\n warning = 'warning',\r\n error = 'error',\r\n warn = 'warn',\r\n info = 'info'\r\n\r\n}\r\n","export enum SubmitType {\r\n insert = 'insert',\r\n update = 'update',\r\n delete = 'delete',\r\n login='login'\r\n}\r\n","export enum FileShowTypeEnum {\r\n upload = \"upload\",\r\n uploadAndShow = \"uploadAndShow\",\r\n list = \"list\",\r\n tableButton = \"tableButton\",\r\n profilePhoto = \"profilePhoto\",\r\n show = \"show\"\r\n}","\r\nimport { FormGroup } from \"@angular/forms\";\r\nimport { Ref } from \"./ref.model\";\r\nimport { InputTypeEnum } from \"../enums\";\r\nimport { FormListItemModel } from \"./form/form-list-item.model\";\r\n\r\nexport interface FormModel {\r\n id: number;\r\n name?: string;\r\n title?: string;\r\n description?: string;\r\n tableName?: string;\r\n getdataUrl?: string;\r\n saveUrl?: string;\r\n updateUrl?: string;\r\n deleteUrl?: string;\r\n formControlTemplateList?: FormControlTemplate[];\r\n row: number;\r\n col: number;\r\n}\r\n\r\nexport interface RowConfig {\r\n col?: number;\r\n}\r\n\r\nexport class FormControlTemplate {\r\n type?: string | any;\r\n inputType?: string = InputTypeEnum.textbox;\r\n key: string | any;\r\n label?: string | any;\r\n value?: FormListItemModel[] | any;\r\n explanation?: string | any;\r\n placeholder?: string | any;\r\n required?: boolean | any;\r\n readonly?: boolean = false;\r\n minLength?: number | any;\r\n maxLength?: number | any;\r\n autoComplete?:boolean\r\n //yeni item butonu ile ilgili alanlar \r\n newItemButton?: boolean = false;\r\n newItemButtonLabel?: string;\r\n newItemButtonClick?: (event?: any) => void;\r\n //yeni item butonu ile ilgili alanlar \r\n\r\n class?: string | any;\r\n style?: string | any;\r\n show?: boolean = true;\r\n oneMore?: boolean = false;\r\n disabled?: boolean | any;\r\n\r\n //mask textbox\r\n mask?: string | any;\r\n\r\n //number\r\n min?: number | any;\r\n max?: number | any;\r\n prefix?: string | any;\r\n suffix?: string | any;\r\n step?: number | any;\r\n\r\n //select,dropdown,multiselect\r\n options?: Ref[] | any;\r\n optionLabel?: string | any;\r\n optionValue?: string | any;\r\n showClear?: boolean | any;\r\n autoDisplayFirst?: boolean | any;\r\n virtualScroll?: boolean | any;\r\n filter?: boolean | any;\r\n editable?: boolean | any;\r\n virtualScrollItemSize?: number | any;\r\n grouped?: boolean | any;\r\n display?: string | any;\r\n selectionLimit?: number | any;\r\n\r\n refUrl?: string;\r\n refKey?: string;\r\n queryParameter?: string;\r\n\r\n\r\n\r\n //calendar\r\n minDate?: Date | any;\r\n maxDate?: Date | any;\r\n showTime?: boolean = false;\r\n timeOnly?: boolean = false;\r\n showSeconds?: boolean = false;\r\n\r\n\r\n\r\n //texterea\r\n rows?: number | any;\r\n cols?: number | any;\r\n autoResize?: boolean | any;\r\n\r\n\r\n //fileupload\r\n fileCanUpload?: boolean = true;\r\n fileRefEntityId?: number;//table id veri tabanında ki tablolara karşılık geliyor\r\n fileEntityId?: number;\r\n fileUrl?: string;\r\n fileDeleteUrl?: string;\r\n fileUploadUrl?: string;\r\n fileDownloadUrl?: string;\r\n fileListUrl?: string;\r\n fileShowType?: string;\r\n fileShowName?: string;\r\n fileName?: string;\r\n fileBorder?: string;\r\n fileRadius?: string;\r\n fileMime?: string;\r\n fileWidth?: any;\r\n fileHeight?: any;\r\n fileButtonText?: string;\r\n\r\n\r\n picklistTarget?: any[] = [];\r\n picklistSource?: any[] = [];\r\n\r\n children?: FormControlTemplate[] = [];\r\n\r\n // Row and Column\r\n //row?: RowConfig[] = [];\r\n //defaultCol?: number = 1;\r\n showGrid?: boolean = true;\r\n forceSelection?: boolean = false;\r\n rowOrder?: number = 0;\r\n}\r\nexport class FormGroupTemplate {\r\n refEntityId?: number;//table id veri tabanında ki tablolara karşılık geliyor\r\n controls: FormControlTemplate[] = [];\r\n formGroup: FormGroup | any;\r\n formSubmited: boolean = false;\r\n}\r\nexport class FormGroupControlTemplate {\r\n key?: string;\r\n refEntityId?: number;//table id veri tabanında ki tablolara karşılık geliyor\r\n control?: FormControlTemplate = {} as FormControlTemplate;\r\n formGroup: FormGroup | any;\r\n formSubmited: boolean = false;\r\n}","\r\nimport { ListOptions } from \"./list-options.model\";\r\nimport { FormControlTemplate, } from \"./form.model\";\r\n\r\nexport class ResponseModel<T> {\r\n statusCode?: number;\r\n errorCode?: number;\r\n \r\n message?: string;\r\n data?: T | any;\r\n listOptions?: ListOptions<T>; // dyanmic bir list olacaksa \r\n\r\n //dynamic form oluşturmak için\r\n formControlTemplate?: FormControlTemplate[] | any[] | any = [];\r\n\r\n //pagination\r\n pageNo?: number;\r\n pageSize?: number;\r\n totalCount?: number;\r\n totalPages?: number;\r\n \r\n}","import { Project } from \"./project.model\";\r\n\r\nexport class AppConfig {\r\n production?: boolean;\r\n API_URL?: string;\r\n baseurl?: string;\r\n apiName?: string;\r\n projects?: Project;\r\n projectsApi?: Project;\r\n\r\n constructor() {}\r\n}","export class InputControlCommand{\r\n key?:string;\r\n command?: (event?: any) => void;\r\n}","import { ListButtons } from \"./list-button.model\";\r\nimport { Column } from \"./column.model\";\r\n\r\nexport class ListOptions<T> {\r\n dataList?: T[]; //kayıtlar\r\n tableSize?: string;\r\n columns?: Column[]; //kolonların adları\r\n columnsRowExpansion?: Column[]; //RowExpansion kolonların adları\r\n filterColumns?: string[] = []; // hangi alanların filtreleneceğini bildirir\r\n tableName?: string = \"Liste\";//tablo adı\r\n dataKey?: string = \"Id\";\r\n pageSize?: number = 50;\r\n loading?: boolean = false;\r\n scrollable?: boolean = true;\r\n scrollHeight?: string = \"400px\";\r\n formMode?: string = \"modal\"; //modal,inline\r\n isHeader?: boolean = true;\r\n isRowIndexVisible?: boolean = false;\r\n isRowExpansion?: boolean = false;\r\n rowIndexText?: string = \"No\";\r\n isRowClick?: boolean = true;\r\n downloadExcel?: boolean = false;\r\n isSearchableFilter?: boolean = false;\r\n isLazyLoading?: boolean = false;\r\n print?:boolean = false;\r\n isComplexSearchEnabled?: boolean = false;\r\n isSearchEnabled?: boolean = false;\r\n isRefreshButton?: boolean = true;\r\n isAddButton?: boolean = true;\r\n isActionsButton?: boolean = false;\r\n customButtons?: ListButtons[] = [];\r\n styleClass?: string;\r\n isRowEdit?: boolean = false;\r\n showFooter?: boolean = false;\r\n groupRowsBy?: string;\r\n rowGroupMode?: RowGroupMode;\r\n isReOrderableColumns?: boolean = false;\r\n selectionMode?: string = \"single\";\r\n}\r\n\r\n\r\nexport type RowGroupMode = \"subheader\" | \"rowspan\" | undefined;","import { Type } from \"@angular/compiler\";\r\nimport { InputTypeEnum } from \"../enums\";\r\nimport { OptionItemModel } from \"./option-item.model\";\r\nexport class Column {\r\n refEntityId?: number;\r\n field?: string;\r\n header?: string;\r\n routerLinkText?: string;\r\n type?: InputTypeEnum = InputTypeEnum.textbox;\r\n filter?: boolean = false;\r\n isMergeable?: boolean = false;\r\n className?: string;\r\n isEdit?: boolean = false;\r\n isRowClick?: boolean = false;\r\n index?: number;\r\n columnName?: string;\r\n columnIndex?: number;\r\n fileCanUpload?: boolean = false;\r\n width?: string;\r\n height?: string;\r\n border?: string;// = '2px solid #d2d6de;';\r\n radius?: string;// = \"50%\";\r\n class?: string;\r\n style?: string;\r\n pTooltip?: boolean = false;\r\n tooltipText?: string;\r\n tooltipPosition?: string = \"top\";\r\n command?: (event: any) => void;\r\n isRowExpansion?: boolean = false;\r\n options?: OptionItemModel[]; \r\n optionlabel?: string;\r\n optionvalue?: string;\r\n readonly?: boolean = false;\r\n showTotal?: boolean = false;\r\n showButton?: boolean = false;\r\n editField?: string;\r\n tagField?: string;\r\n backgroundColor?: string = \"\";\r\n}\r\n","import { HttpRequest } from '@angular/common/http';\n// tslint:disable:no-bitwise\n\nimport { Injectable, Inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class JwtHelperService {\n\n public urlBase64Decode(str: string): string {\n let output = str.replace(/-/g, '+').replace(/_/g, '/');\n switch (output.length % 4) {\n case 0: {\n break;\n }\n case 2: {\n output += '==';\n break;\n }\n case 3: {\n output += '=';\n break;\n }\n default: {\n throw new Error('Illegal base64url string!');\n }\n }\n return this.b64DecodeUnicode(output);\n }\n\n // credits for decoder goes to https://github.com/atk\n private b64decode(str: string): string {\n const chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n let output = '';\n\n str = String(str).replace(/=+$/, '');\n\n if (str.length % 4 === 1) {\n throw new Error(\n `'atob' failed: The string to be decoded is not correctly encoded.`\n );\n }\n\n for (\n // initialize result and counters\n let bc = 0, bs: any, buffer: any, idx = 0;\n // get next character\n (buffer = str.charAt(idx++));\n // character found in table? initialize bit storage and add its ascii value;\n ~buffer &&\n ((bs = bc % 4 ? bs * 64 + buffer : buffer),\n // and if not first of each 4 characters,\n // convert the first 8 bits to one ascii character\n bc++ % 4)\n ? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6))))\n : 0\n ) {\n // try to find character in table (0-63, not found => -1)\n buffer = chars.indexOf(buffer);\n }\n return output;\n }\n\n private b64DecodeUnicode(str: any) {\n return decodeURIComponent(\n Array.prototype.map\n .call(this.b64decode(str), (c: any) => {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join('')\n );\n }\n\n\n decodeToken<T = any>(token: string): null | T {\n if (!token || token === '') {\n return null;\n }\n\n const parts = token.split('.');\n\n if (parts.length !== 3) {\n throw new Error(\n `The inspected token doesn't appear to be a JWT. Check to make sure it has three parts and see https://jwt.io for more.`\n );\n }\n\n const decoded = this.urlBase64Decode(parts[1]);\n if (!decoded) {\n throw new Error('Cannot decode the token.');\n }\n\n return JSON.parse(decoded);\n }\n\n\n getTokenExpirationDate(token: string): Date | null {\n let decoded: any;\n decoded = this.decodeToken(token);\n\n if (!decoded || !decoded.hasOwnProperty('exp')) {\n return null;\n }\n\n const date = new Date(0);\n date.setUTCSeconds(decoded.exp);\n\n return date;\n }\n\n isTokenExpired(\n token: string | null,\n offsetSeconds?: number\n ): boolean {\n if (!token || token === '') {\n return true;\n }\n const date = this.getTokenExpirationDate(token);\n offsetSeconds = offsetSeconds || 0;\n\n if (date === null) {\n return false;\n }\n\n return !(date.valueOf() > new Date().valueOf() + offsetSeconds * 1000);\n }\n\n public getAuthScheme(\n authScheme: Function | string | undefined,\n request: HttpRequest<any>\n ): string | undefined {\n if (typeof authScheme === 'function') {\n return authScheme(request);\n }\n\n return authScheme;\n }\n}\n","import { Injectable, inject } from '@angular/core';\r\nimport { NavigationExtras, Router } from '@angular/router';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { JwtHelperService } from './jwthelper.service';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { HttpClient, HttpErrorResponse, HttpResponse } from '@angular/common/http';\r\nimport { ValidationErrors } from '@angular/forms';\r\nimport { AppConfig, User } from '../models';\r\nimport { BaseComponent } from '../components';\r\n\r\n@Injectable()\r\nexport class GlobalService {\r\n appConfig: AppConfig;\r\n http: HttpClient;\r\n\r\n constructor( private router: Router,private confirmationService: ConfirmationService,private messageService: MessageService,private jwtHelper: JwtHelperService ) {\r\n this.appConfig = inject(AppConfig);\r\n this.http = inject(HttpClient);\r\n }\r\n getUserLocal(): User | any {\r\n let token = this.getTokenLocal();\r\n if (!token)\r\n return null;\r\n let expirationDate = this.jwtHelper.getTokenExpirationDate(token);\r\n let user = this.jwtHelper.decodeToken(token) as User | any;\r\n if (user && user.id && user.id != 0) {\r\n user.roles = user.roles ?? user['http://schemas.microsoft.com/ws/2008/06/identity/claims/role'];\r\n }\r\n return user;\r\n } \r\n isAuthenticated(): boolean {\r\n return this.getUserLocal() ? true : false;\r\n }\r\n\r\n getApiName(): string {\r\n return this.appConfig.apiName ?? \"\";\r\n }\r\n navigate(commands: any[], extras?: NavigationExtras): void {\r\n this.router.navigate(commands, extras);\r\n }\r\n onError(error: HttpErrorResponse | any, cmp?: BaseComponent) {\r\n if (cmp) {\r\n cmp.blocked = false;\r\n cmp.success = false;\r\n }\r\n if ([401, 403].includes(error.status)) {\r\n if (this.getTokenLocal()) {\r\n // this.logout();\r\n this.showMessage('warring', 'Oturum süreniz dolmuştur.');\r\n }\r\n } else {\r\n this.onErrorMessage(error);\r\n }\r\n return throwError(() => error);//() => new Error(error);\r\n }\r\n onSuccess(cmp?: BaseComponent): void {\r\n if (cmp) {\r\n cmp.success = true;\r\n }\r\n }\r\n showMessage(status: any, mesaj?: string, konu?: string): void {\r\n let severity_, summary_;\r\n if (status == 'error' || status == false || status == 0 || status == 'hata') {\r\n severity_ = 'error';\r\n summary_ = konu ?? 'Hata';\r\n } else if (status == 'success' || status == true || status == 1 || status == 'başarılı' || status == 'basarili'\r\n ) {\r\n severity_ = 'success';\r\n summary_ = konu ?? 'Başarılı';\r\n } else if (status == 'warn' || status == 'warring' || status == 2 || status == 'uyarı' || status == 'uyari') {\r\n severity_ = 'warn';\r\n summary_ = konu ?? 'Uyarı';\r\n } else if (status == 'info' || status == 3 || status == 'bilgi') {\r\n severity_ = 'info';\r\n summary_ = konu ?? 'Bilgi';\r\n }\r\n this.messageService.add({\r\n severity: severity_,\r\n summary: summary_,\r\n detail: mesaj,\r\n life: 5000,\r\n });\r\n }\r\n onErrorMessage(event: any, mesaj?: string, konu?: string): void {\r\n let severity_, summary_;\r\n severity_ = 'error';\r\n summary_ = konu ?? 'Hata';\r\n\r\n let error = event?.error?.Message ?? event.error;\r\n\r\n console.error(event);\r\n let hataIndex = -1;\r\n if (error && error.length > 0) {\r\n hataIndex = error?.indexOf('HATA!');\r\n }\r\n\r\n if ((hataIndex || hataIndex == 0) && hataIndex > -1) {\r\n hataIndex += 5;\r\n let hataIndexSon = error?.indexOf('\\r\\n');\r\n if (hataIndexSon < 0) {\r\n hataIndexSon = error.length;\r\n }\r\n mesaj = error?.substr(hataIndex, hataIndexSon - hataIndex);\r\n } else if (!mesaj) {\r\n let index;\r\n if (event.status == 400) {\r\n mesaj =\r\n error ??\r\n event.error?.title ??\r\n 'Bir veya daha fazla form doğrulama hatası oluştu.';\r\n } else {\r\n mesaj = error;\r\n // if (event && event.error && event.error.length > 0)\r\n // index = event.error?.indexOf('\\r\\n') ?? -1;\r\n\r\n // mesaj = error ?? index > -1 ? hataIndex.error.substr(0, index) : hataIndex.message;\r\n }\r\n }\r\n this.messageService.add({\r\n severity: severity_,\r\n summary: summary_,\r\n detail: mesaj,\r\n life: 5000,\r\n });\r\n }\r\n showMessageData(data: any) {\r\n let detail, severity, summary;\r\n if (data == true) {\r\n detail = 'İşlem başarılı';\r\n summary = 'Başarılı';\r\n severity = 'success';\r\n } else if (data instanceof HttpErrorResponse) {\r\n const body = data.error || '';\r\n const err = (body.Data && body.Data.Hata) || data.statusText;\r\n severity = 'error';\r\n summary = data.name;\r\n detail = err;\r\n } else {\r\n if (typeof data === 'string') {\r\n data = JSON.parse(data);\r\n }\r\n if (data.Success == false || (data.Data && data.Data.Success == false)) {\r\n severity = 'error';\r\n summary = 'Hata';\r\n if (data.Success == false) {\r\n detail = data.Mesaj || data.Data.Mesaj;\r\n }\r\n } else {\r\n detail = data.Mesaj || data?.Data?.Detail || data.Data?.Mesaj || '';\r\n summary = 'Başarılı';\r\n severity = 'success';\r\n }\r\n }\r\n this.messageService.add({\r\n severity: severity,\r\n summary: summary,\r\n detail: detail,\r\n });\r\n }\r\n confirm(header: string, message: string, callback: { (): void } , icon?: string, acceptLabel?: string, rejectLabel?: string) {\r\n this.confirmationService.confirm({\r\n header: header,\r\n message: message,\r\n icon: icon,\r\n acceptLabel : acceptLabel,\r\n rejectLabel : rejectLabel,\r\n rejectButtonStyleClass:\"p-button-danger mr-3\",\r\n accept: () => {\r\n callback();\r\n },\r\n });\r\n }\r\n\r\n getIpClient(): Observable<any> {\r\n return this.http.get('https://api.ipify.org/?format=json', {\r\n responseType: 'json',\r\n });\r\n }\r\n convertToDate(tarih: any) {\r\n if (tarih instanceof Date) return tarih;\r\n if (!tarih) {\r\n return null;\r\n }\r\n let gun = +tarih.substring(0, 2);\r\n let ay = +tarih.substring(3, 5);\r\n let yil = +tarih.substring(6, 10);\r\n let saat = 0;\r\n let dakika = 0;\r\n if (tarih.length > 10) {\r\n saat = +tarih.substring(11, 13);\r\n dakika = +tarih.substring(14, 16);\r\n }\r\n return new Date(yil, ay - 1, gun, saat, dakika);\r\n }\r\n convertToTime(saatInput: string) {\r\n let tarih = new Date();\r\n\r\n let saat = +saatInput.split(\":\")[0];\r\n let dakika = +saatInput.split(\":\")[1];\r\n\r\n return new Date(tarih.getFullYear(), tarih.getMonth(), tarih.getDay(), saat, dakika);\r\n }\r\n convertToStringTime(tarih: any) {\r\n if (typeof tarih != \"string\")\r\n return tarih.getHours() + \":\" + (tarih.getMinutes().length == 1 ? \"0\" + tarih.getMinutes() : tarih.getMinutes());\r\n else if (tarih.toString().length < 10) {\r\n return tarih;\r\n }\r\n else {\r\n let saat = tarih.substring(11, 13);\r\n let dakika = tarih.substring(14, 16);\r\n return saat + \":\" + dakika;\r\n }\r\n\r\n }\r\n convertToDatetoString(tarih: any) {\r\n if (!tarih) {\r\n return null;\r\n }\r\n let gun = +tarih.substring(0, 2);\r\n let ay = +tarih.substring(3, 5);\r\n let yil = +tarih.substring(6, 10);\r\n let saat = 0;\r\n let dakika = 0;\r\n if (tarih.length > 10) {\r\n saat = +tarih.substring(11, 13);\r\n dakika = +tarih.substring(14, 16);\r\n }\r\n return yil + \"-\" + ay + \"-\" + gun + \" \" + saat + \":\" + dakika;\r\n }\r\n\r\n convertToLocalDate(responseDate: any) {\r\n try {\r\n if (responseDate != null) {\r\n if (typeof responseDate === 'string') {\r\n if (String(responseDate.indexOf('T') >= 0)) {\r\n responseDate = responseDate.split('T')[0];\r\n }\r\n if (String(responseDate.indexOf('+') >= 0)) {\r\n responseDate = responseDate.split('+')[0];\r\n }\r\n }\r\n responseDate = new Date(responseDate);\r\n const newDate = new Date(\r\n responseDate.getFullYear(),\r\n responseDate.getMonth(),\r\n responseDate.getDate(),\r\n 0,\r\n 0,\r\n 0\r\n );\r\n const userTimezoneOffset = newDate.getTimezoneOffset() * 60000;\r\n\r\n const finalDate: Date = new Date(\r\n newDate.getTime() - userTimezoneOffset\r\n );\r\n return finalDate;\r\n } else {\r\n return null;\r\n }\r\n } catch (error) {\r\n return responseDate;\r\n }\r\n }\r\n //#region localstorce\r\n getCookieValue(cookieName: string) {\r\n const allCookies = decodeURIComponent(document.cookie).split(\"; \");\r\n for (let i = 0; i < allCookies.length; i++) {\r\n const cookie = allCookies[i];\r\n if (cookie.startsWith(cookieName + \"=\")) {\r\n return cookie.substring(cookieName.length + 1);\r\n }\r\n }\r\n return \"\";\r\n }\r\n getTokenLocal(): string | any {\r\n return localStorage.getItem('auth-token');\r\n }\r\n setTokenLocal(token: string) {\r\n localStorage.removeItem('auth-token');\r\n localStorage.setItem('auth-token', token);\r\n }\r\n\r\n setRefreshTokenLocal(token: string) {\r\n localStorage.removeItem('auth-token');\r\n localStorage.setItem('auth-token', token);\r\n }\r\n\r\n\r\n removeToken(): void {\r\n localStorage.removeItem('auth-token');\r\n localStorage.removeItem('menu-list');\r\n }\r\n setLocalStorage(key: string, value: string): void {\r\n localStorage.setItem(key, value);\r\n }\r\n\r\n removeLocalStorage(key: string): void {\r\n localStorage.removeItem(key);\r\n }\r\n\r\n getLocalStorage(key: string): string | any {\r\n return localStorage.getItem(key);\r\n }\r\n removeMenuList(): void {\r\n localStorage.removeItem('menu-list');\r\n }\r\n //#endregion\r\n\r\n //#region kontroller\r\n isEmpty(deger: any, bosGecilebilir?: boolean): boolean {\r\n return deger == null || deger == undefined || deger == 'null' || deger == 'undefined' || ((deger instanceof Array) && (!deger.length || deger.length == 0)) || (!bosGecilebilir ? deger === '' : false);\r\n }\r\n\r\n isNumber(deger: any) {\r\n return typeof deger === 'number' || Object.prototype.toString.call(deger) === '[object Number]';\r\n }\r\n isDate(data: any): boolean {\r\n if (data instanceof Date) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n isTckn(tckn: number): boolean {\r\n let deger = new String(tckn);\r\n let sonuc: boolean = true;\r\n if (deger) {\r\n if (deger.substring(0, 1) == \"0\" || deger.length > 11 || deger.length < 11) {\r\n sonuc = false;\r\n }\r\n if (sonuc == true) {\r\n var i = 9;\r\n let md = '';\r\n let mc = '';\r\n let digit: string;\r\n let mr = '';\r\n while (digit = deger.charAt(--i)) {\r\n i % 2 == 0 ? md += digit : mc += digit;\r\n }\r\n\r\n if ((((+(md.split('').join('+')) * 7) - +(mc.split('').join('+'))) % 10) != parseInt(deger.slice(9, 1), 10)) {\r\n sonuc = false;\r\n }\r\n if (sonuc == true) {\r\n for (var c = 0; c <= 9; c++) {\r\n mr += deger.charAt(c);\r\n }\r\n if (+(mr.split('').join('+')) % 10 != parseInt(deger.slice(10, 1), 10)) {\r\n sonuc = false;\r\n }\r\n }\r\n }\r\n }\r\n return sonuc;\r\n }\r\n isIban(deger: string): boolean {\r\n let sonuc: boolean = true;\r\n if (deger) {\r\n sonuc = /^([a-zA-Z0-9]{4} ){2,8}[a-zA-Z0-9]{1,4}|[a-zA-Z0-9]{12,34}$/.test(deger);\r\n }\r\n return sonuc;\r\n }\r\n\r\n iban(control: any): ValidationErrors | null {\r\n if (this.isEmpty(control.value) || this.isIban(control.value)) {\r\n return null;\r\n }\r\n return { iban: true };\r\n }\r\n\r\n tckn(control: any): ValidationErrors | null {\r\n if (this.isEmpty(control.value) || this.isTckn(control.value)) {\r\n return null;\r\n }\r\n return { tckn: true };\r\n }\r\n //#endregion\r\n public handleBlobResponse(event: HttpResponse<any>) {\r\n let blob = event.body;\r\n var contentDispositionHeader = event.headers.get('Content-Disposition');\r\n if (contentDispositionHeader) {\r\n var result = contentDispositionHeader\r\n .split(';')[1]\r\n .trim()\r\n .split('=')[1];\r\n if (result) {\r\n var fileName = result.replace(/\"/g, '');\r\n let link = document.createElement('a');\r\n link.style.display = 'none';\r\n document.body.appendChild(link);\r\n if (link.getAttribute('download') !== undefined) {\r\n link.setAttribute('href', URL.createObjectURL(blob));\r\n link.setAttribute('download', fileName);\r\n link.click();\r\n }\r\n document.body.removeChild(link);\r\n }\r\n }\r\n }\r\n\r\n getBodyHeight(): number {\r\n return document.body.clientHeight - 50;\r\n }\r\n}\r\n\r\n","import { HttpClient, HttpHeaders } from \"@angular/common/http\";\r\nimport { inject } from \"@angular/core\";\r\nimport { GlobalService } from \"./global.service\";\r\nimport { Observable, catchError, of, tap, throwError } from \"rxjs\";\r\nimport { Filter, HttpParam, Ref, ResponseModel } from \"../models\";\r\n\r\n\r\nexport abstract class BaseService<T> {\r\n protected _baseApiUrl?: string;// base url (proje url)\r\n public http: HttpClient;\r\n public globalService: GlobalService;\r\n\r\n constructor(apiName?: string) {\r\n this.http = inject(HttpClient);\r\n this.globalService = inject(GlobalService);\r\n\r\n this._baseApiUrl = this.globalService.appConfig.projectsApi![apiName ?? this.globalService.appConfig.apiName!];\r\n }\r\n\r\n public get baseApiUrl(): string | undefined {\r\n return this._baseApiUrl;\r\n }\r\n\r\n //#region get,post,put,delete\r\n get<T>(url: string, ...params: any[]): Observable<ResponseModel<T>> | Observable<ResponseModel<null>> {\r\n //örnek: http://localhost:89/api/auth/login\r\n //örnek: http://turnaprojectapi.ua.gov.tr/api/auth/login\r\n let _url = url.includes(\"http\") ? url : this._baseApiUrl + (url.indexOf('/') !== 0 ? '/' : '') + url;\r\n\r\n if (params.length > 0 && typeof params[0] === 'string') { //route parametrelerini almak için\r\n _url += `/${params.join('/')}`;\r\n } else if (params.length > 0 && typeof params[0] === 'object') { //query parametrelerini almak için\r\n return this.http.get<T>(_url, { params: params[0] }) as Observable<ResponseModel<T>>;\r\n }\r\n //parametre almayacak şekilde ayarlandı.\r\n return this.http.get(_url) as Observable<ResponseModel<T>>;\r\n }\r\n\r\n post<T>(url: string, model: object | any): Observable<ResponseModel<T>> | Observable<ResponseModel<null>> {\r\n if (!url || !model) {\r\n return new Observable<ResponseModel<null>>(\r\n (subscriber) => {\r\n\r\n subscriber.next(new ResponseModel<null>());\r\n }\r\n );\r\n }\r\n\r\n let _url = url.includes(\"http\") ? url : this._baseApiUrl + (url.indexOf('/') !== 0 ? '/' : '') + url;\r\n let _model = JSON.stringify(model);\r\n\r\n return this.http.post(_url, _model) as Observable<ResponseModel<T>>;\r\n }\r\n\r\n put<T>(url: string, model: object | any): Observable<ResponseModel<T>> | Observable<ResponseModel<null>> {\r\n if (!url || !model) {\r\n return new Observable<ResponseModel<null>>(\r\n (subscriber) => {\r\n subscriber.next(new ResponseModel<null>());\r\n }\r\n );\r\n }\r\n\r\n let _url = url.includes(\"http\") ? url : this._baseApiUrl + (url.indexOf('/') !== 0 ? '/' : '') + url;\r\n let _model = JSON.stringify(model);\r\n\r\n return this.http.put(_url, _model) as Observable<ResponseModel<T>>;\r\n }\r\n\r\n delete<T>(url: string, ...params: any[]): Observable<ResponseModel<T>> | Observable<ResponseModel<null>> {\r\n\r\n let _url = url.includes(\"http\") ? url : this._baseApiUrl + (url.indexOf('/') !== 0 ? '/' : '') + url;\r\n\r\n if (params.length > 0 && typeof params[0] === 'string') { //route parametrelerini almak için\r\n _url += `/${params.join('/')}`;\r\n } else if (params.length > 0 && typeof params[0] === 'object') { //query parametre yada model almak için\r\n return this.http.delete<T>(_url, { params: params[0] }) as Observable<ResponseModel<T>>;\r\n }\r\n\r\n return this.http.delete<T>(_url) as Observable<ResponseModel<T>>;\r\n }\r\n //#endregion\r\n\r\n list<T>(httpParam: HttpParam = {} as HttpParam): Observable<ResponseModel<T[]>> | Observable<ResponseModel<T>> | Observable<ResponseModel<any>> {\r\n if (!httpParam.url) {\r\n return throwError(() => new Error(`CATNG BaseService => Url not found`));\r\n }\r\n\r\n let _url = httpParam.url.includes(\"http\") ? httpParam.url : this._baseApiUrl + (httpParam.url.indexOf('/') !== 0 ? '/' : '') + httpParam.url;\r\n\r\n if (httpParam.method != 'POST') {\r\n if (httpParam.page && httpParam.pageSize) {\r\n _url += `/${httpParam.page}/${httpParam.pageSize}`;\r\n }\r\n\r\n if (httpParam.sortBy && httpParam.sortBy.length > 0) {\r\n _url += `/${httpParam.sortBy.join('/')}`;\r\n }\r\n\r\n return this.http.get(_url) as Observable<ResponseModel<T[]>>;\r\n }\r\n if (!httpParam.filters || (httpParam.filters && httpParam.filters instanceof Filter)) {\r\n return this.http.post(_url, httpParam) as Observable<ResponseModel<T[]>>;\r\n } else {\r\n return this.http.post(_url, httpParam.filters) as Observable<ResponseModel<T[]>>;\r\n }\r\n\r\n }\r\n\r\n download<T>(url: string, ...params: any[]): Observable<Blob | MediaSource> {\r\n let _url = url.includes(\"http\") ? url : this._baseApiUrl + (url.indexOf('/') !== 0 ? '/' : '') + url;\r\n\r\n if (params.length > 0 && typeof params[0] === 'string') { //route parametrelerini almak için\r\n _url += `/${params.join('/')}`;\r\n } else if (params.length > 0 && typeof params[0] === 'object') { //query parametrelerini almak için\r\n return this.http.get<T>(_url, { params : params[0] }) as Observable<Blob | MediaSource>;\r\n }\r\n\r\n return this.http.get(_url, { responseType: 'blob' as 'json' }) as Observable<Blob | MediaSource>;\r\n }\r\n\r\n\r\n getRef(refName: string, fkId?: number | undefined, fk2Id?: string | undefined, fk3Id?: number | undefined, fk4Id?: string | undefined): Observable<ResponseModel<Ref[]>> {\r\n return this.http.post<ResponseModel<Ref[]>>(this._baseApiUrl + \"/ref/list\", { refName: refName, fkId: fkId, fk2Id: fk2Id, fk3Id: fk3Id, fk4Id: fk4Id });\r\n }\r\n\r\n getRefUrl(url: string, refName: string, fkId?: number | undefined, fk2Id?: string | undefined, fk3Id?: number | undefined, fk4Id?: string | undefined): Observable<ResponseModel<Ref[]>> {\r\n return this.http.post<ResponseModel<Ref[]>>(url, { refName: refName, fkId: fkId, fk2Id: fk2Id, fk3Id: fk3Id, fk4Id: fk4Id });\r\n }\r\n\r\n downloadWithModel<T>(url: string, model: object): Observable<Blob | MediaSource> {\r\n if (!url || !model) {\r\n throw new Error('URL ve model zorunludur.');\r\n }\r\n \r\n const _url = url.includes(\"http\") \r\n ? url \r\n : this._baseApiUrl + (url.indexOf('/') !== 0 ? '/' : '') + url;\r\n \r\n return this.http.post(_url, model, { responseType: 'blob' as 'json' }) as Observable<Blob | MediaSource>;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class LoadingService {\r\n loadingSub: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n loadingMap: Map<string, boolean> = new Map<string, boolean>();\r\n isLoading$ = this.loadingSub.asObservable();\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Sets the loadingSub property value based on the following:\r\n * - If loading is true, add the provided url to the loadingMap with a true value, set loadingSub value to true\r\n * - If loading is false, remove the loadingMap entry and only when the map is empty will we set loadingSub to false\r\n * This pattern ensures if there are multiple requests awaiting completion, we don't set loading to false before\r\n * other requests have completed. At the moment, this function is only called from the @link{HttpRequestInterceptor}\r\n * @param loading {boolean}\r\n * @param url {string}\r\n */\r\n setLoading(loading: boolean, url: string): void {\r\n if (!url) {\r\n throw new Error('The request URL must be provided to the LoadingService.setLoading function');\r\n }\r\n if(url.includes('.json')) return;\r\n setTimeout(() => {\r\n if (loading) {\r\n this.loadingMap.set(url, true);\r\n if (this.loadingSub.value === false)\r\n this.loadingSub.next(true);\r\n } else if (loading === false) {\r\n this.loadingMap.delete(url);\r\n if (this.loadingMap.size === 0) {\r\n this.loadingSub.next(false);\r\n }\r\n }\r\n }, 10);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { BaseService } from '../services';\r\n\r\n@Injectable()\r\nexport class DynamicFormPageService<T> extends BaseService<any> {\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","import { Component, inject } from \"@angular/core\";\r\nimport { GlobalService } from \"../services\";\r\n// import { Message } from \"primeng/api\";\r\nimport { DatePipe } from '@angular/common';\r\nimport { FileShowTypeEnum, InputTypeEnum } from \"../enums\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\nimport { Message } from \"primeng/message\";\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [],\r\n template: ``,\r\n host: { 'Id': Math.random().toString() },\r\n})\r\nexport class BaseComponent {\r\n primaryKeyName: string = \"id\"; // bu alanı formlarda id dışında primary key kullanmak için override edebilirsiniz.\r\n id?: any;\r\n page: number = 1;\r\n pageRowsCount: number = 50;\r\n totalRecords: number = 0;\r\n sortField: string[] = [];\r\n blocked: boolean = false;\r\n success?: boolean;\r\n msgs: Message[] = [];\r\n\r\n // translate service\r\n _translateService : TranslateService;\r\n\r\n globalService: GlobalService;\r\n datepipe: DatePipe;\r\n constructor() {\r\n this.globalService = inject(GlobalService);\r\n this._translateService = inject(TranslateService);\r\n this.datepipe = inject(DatePipe);\r\n }\r\n\r\n\r\n public get inputTypeEnum(): typeof InputTypeEnum {\r\n return InputTypeEnum;\r\n }\r\n public get fileShowTypeEnum(): typeof FileShowTypeEnum {\r\n return FileShowTypeEnum;\r\n }\r\n\r\n\r\n public getRandomInt(max: number) {\r\n return Math.random() * max;\r\n }\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { BaseComponent } from './base.component';\r\n\r\n@Component({\r\n\tstandalone: true,\r\n\ttemplate: ``,\r\n\thost: { 'Id': Math.random().toString() },\r\n})\r\nexport class FilterPageSortComponent extends BaseComponent {\r\n\trows = 15;\r\n\tfilterDelay = 1000;\r\n\trowsPerPageOptions = [25, 50, 100];\r\n\tcurrentPageReportTemplate = \"{first} - {last} / {totalRecords}\"\r\n}\r\n\r\n","import { Component, EventEmitter, Output } from '@angular/core';\r\nimport { FilterPageSortComponent } from './filter-page-sort.component';\r\nimport { ListOptions } from '../models/list-options.model';\r\nimport { MenuItem } from 'primeng/api';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'lib-base',\r\n template: ``,\r\n host: { 'Id': Math.random().toString() },\r\n})\r\nexport class BaseListComponent<ListModel, FormModel> extends FilterPageSortComponent {\r\n list: ListModel[] = [];\r\n data?: FormModel;\r\n formVisible: boolean = false;\r\n rowMenuItemList: MenuItem[] = [];\r\n actionMenuItems: MenuItem[] = [];\r\n listOptions: ListOptions<ListModel>;\r\n @Output() resp = new EventEmitter();\r\n /**\r\n *\r\n */\r\n constructor() {\r\n super();\r\n this.listOptions = {};\r\n }\r\n\r\n\r\n\r\n\r\n\r\n}\r\n","import { Component, EventEmitter, HostListener, Input, OnInit, Output, ViewChild, inject } from '@angular/core';\r\nimport { BaseListComponent } from '../base-list.component';\r\nimport { Column, FileOptions } from '../../models';\r\nimport { FileUpload } from 'primeng/fileupload';\r\nimport { AppConfig } from '../../models/app.config';\r\nimport { SelectItem } from 'primeng/api';\r\nimport { CommonModule, DatePipe } from '@angular/common';\r\nimport { FileUploadModule } from 'primeng/fileupload';\r\n\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'cat-file',\r\n templateUrl: './file-control.component.html',\r\n styleUrls: ['./file-control.component.scss'],\r\n host: { 'Id': Math.random().toString() },\r\n imports: [CommonModule, FileUploadModule],\r\n providers: [DatePipe]\r\n})\r\nexport class CatFileComponent extends BaseListComponent<FileOptions, any> implements OnInit {\r\n\r\n @Input() fileOptions?: FileOptions;\r\n @Input() uploadButtonText?: string;\r\n @Output() uploadCompleted = new EventEmitter();\r\n @Output() onCompleted = new EventEmitter();\r\n @Input() canFileUpload?: boolean;\r\n @Input() fileUploaded?: boolean;\r\n @Input() readonly?: boolean = false;\r\n\r\n get isFileUpload(): boolean {\r\n return this.canFileUpload ?? this.fileOptions?.canFileUpload ?? false;\r\n }\r\n\r\n token?: string;\r\n baseurl?: string;\r\n //fileUrl: string;\r\n\r\n date?: Date | string | any;\r\n\r\n showModal: boolean = false;\r\n preview: boolean = false;\r\n\r\n files: File[] = [];\r\n fileTur?: number;\r\n fileTurList?: SelectItem[];\r\n\r\n\r\n isPDF?: boolean;\r\n PDFdosyayolu?: string;\r\n pdfHeight: string = \"450px\";\r\n\r\n fileUrl: string = '';\r\n\r\n columns?: Column[];\r\n fileCss: object | any = {};\r\n\r\n datePipe: DatePipe;\r\n\r\n\r\n @ViewChild('fu') fu?: FileUpload;\r\n mimeClass = [\r\n { mime: 'image', class: 'fas fa-file-image' },\r\n { mime: 'audio', class: 'fas fa-file-audio' },\r\n { mime: 'video', class: 'fas fa-file-video' },\r\n { mime: 'application/pdf', class: 'fas fa-file-pdf' },\r\n { mime: 'application/msword', class: 'fas fa-file-word' },\r\n { mime: 'application/vnd.ms-word', class: 'fas fa-file-word' },\r\n { mime: 'application/vnd.oasis.opendocument.text', class: 'fas fa-file-word' },\r\n { mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml', class: 'fas fa-file-word' },\r\n { mime: 'application/vnd.ms-excel', class: 'fas fa-file-excel' },\r\n { mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml', class: 'fas fa-file-excel' },\r\n { mime: 'application/vnd.oasis.opendocument.spreadsheet', class: 'fas fa-file-excel' },\r\n { mime: 'application/vnd.ms-powerpoint', class: 'fas fa-file-powerpoint' },\r\n { mime: 'application/vnd.openxmlformats-officedocument.presentationml', class: 'fas fa-file-powerpoint' },\r\n { mime: 'application/vnd.oasis.opendocument.presentation', class: 'fas fa-file-powerpoint' },\r\n { mime: 'text/plain', class: 'fas fa-file-text' },\r\n { mime: 'text/html', class: 'fas fa-file-code' },\r\n { mime: 'application/json', class: 'fas fa-file-code' },\r\n { mime: 'application/gzip', class: 'fas fa-file-archive' },\r\n { mime: 'application/zip', class: 'fas fa-file-archive' },\r\n ]\r\n\r\n appConfig: AppConfig;\r\n\r\n constructor(\r\n ) {\r\n super();\r\n this.appConfig = inject(AppConfig);\r\n this.datePipe = inject(DatePipe);\r\n this.date = this.datePipe.transform(new Date(), 'dd.MM.yyyy h:mm:ss a');\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n this.date