appproject-framework 1.0.13 → 1.0.14

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.
@@ -1 +1 @@
1
- {"version":3,"file":"appproject-framework.mjs","sources":["../../../projects/appproject-framework/src/lib/appproject-framework.ts","../../../projects/appproject-framework/src/lib/services/lib.service.ts","../../../projects/appproject-framework/src/lib/model/decorators.ts","../../../projects/appproject-framework/src/lib/model/base-model.ts","../../../projects/appproject-framework/src/lib/model/html-campo.ts","../../../projects/appproject-framework/src/lib/model/html-row.ts","../../../projects/appproject-framework/src/lib/model/pesquisa-campo.ts","../../../projects/appproject-framework/src/lib/model/page-result.ts","../../../projects/appproject-framework/src/lib/pipes/nome.pipe.ts","../../../projects/appproject-framework/src/lib/pipes/valor-format.pipe.ts","../../../projects/appproject-framework/src/lib/pipes/safe-html.pipe.ts","../../../projects/appproject-framework/src/lib/model/tree-model.ts","../../../projects/appproject-framework/src/lib/model/grid-tabela.ts","../../../projects/appproject-framework/src/lib/model/evento-cadastro.ts","../../../projects/appproject-framework/src/lib/model/evento-foco.ts","../../../projects/appproject-framework/src/lib/model/intervalo.ts","../../../projects/appproject-framework/src/utils/dominio.ts","../../../projects/appproject-framework/src/utils/utils-geral.service.ts","../../../projects/appproject-framework/src/entity/services/utils.service.ts","../../../projects/appproject-framework/src/entity/services/base-entity.ts","../../../projects/appproject-framework/src/entity/services/lib-config.token.ts","../../../projects/appproject-framework/src/entity/services/data.service.ts","../../../projects/appproject-framework/src/entity/page/base-page.ts","../../../projects/appproject-framework/src/entity/services/cadastro.service.ts","../../../projects/appproject-framework/src/entity/page/base-cadastro.ts","../../../projects/appproject-framework/src/components/baseInputComponent.ts","../../../projects/appproject-framework/src/components/input-text/input-text.ts","../../../projects/appproject-framework/src/components/input-text/input-text.html","../../../projects/appproject-framework/src/components/tree-view-nivel/tree-view-nivel.ts","../../../projects/appproject-framework/src/components/tree-view-nivel/tree-view-nivel.html","../../../projects/appproject-framework/src/components/tree-view/tree-view.ts","../../../projects/appproject-framework/src/components/tree-view/tree-view.html","../../../projects/appproject-framework/src/components/modal-treeview/modal-treeview.ts","../../../projects/appproject-framework/src/components/modal-treeview/modal-treeview.html","../../../projects/appproject-framework/src/components/input-pesquisa/input-pesquisa.ts","../../../projects/appproject-framework/src/components/input-pesquisa/input-pesquisa.html","../../../projects/appproject-framework/src/components/input-area/input-area.ts","../../../projects/appproject-framework/src/components/input-area/input-area.html","../../../projects/appproject-framework/src/components/input-cep/input-cep.ts","../../../projects/appproject-framework/src/components/input-cep/input-cep.html","../../../projects/appproject-framework/src/components/input-valor/input-valor.ts","../../../projects/appproject-framework/src/components/input-valor/input-valor.html","../../../projects/appproject-framework/src/components/input-checkbox/input-checkbox.ts","../../../projects/appproject-framework/src/components/input-checkbox/input-checkbox.html","../../../projects/appproject-framework/src/components/input-format/input-format.ts","../../../projects/appproject-framework/src/components/input-format/input-format.html","../../../projects/appproject-framework/src/components/input-select/input-select.ts","../../../projects/appproject-framework/src/components/input-select/input-select.html","../../../projects/appproject-framework/src/components/input-radio/input-radio.ts","../../../projects/appproject-framework/src/components/input-radio/input-radio.html","../../../projects/appproject-framework/src/components/entity-edit/entity-edit.ts","../../../projects/appproject-framework/src/components/entity-edit/entity-edit.html","../../../projects/appproject-framework/src/components/grid-view/grid-view.ts","../../../projects/appproject-framework/src/components/grid-view/grid-view.html","../../../projects/appproject-framework/src/components/periodo-intervalo/periodo-intervalo.ts","../../../projects/appproject-framework/src/components/periodo-intervalo/periodo-intervalo.html","../../../projects/appproject-framework/src/components/input-html/input-html.ts","../../../projects/appproject-framework/src/components/input-html/input-html.html","../../../projects/appproject-framework/src/components/input-arquivo/input-arquivo.ts","../../../projects/appproject-framework/src/components/input-arquivo/input-arquivo.html","../../../projects/appproject-framework/src/components/agenda-semanal/agenda-semanal.ts","../../../projects/appproject-framework/src/components/agenda-semanal/agenda-semanal.html","../../../projects/appproject-framework/src/components/buttons/baseBtnComponents.ts","../../../projects/appproject-framework/src/components/buttons/btn-action/btn-action.ts","../../../projects/appproject-framework/src/components/buttons/btn-action/btn-action.html","../../../projects/appproject-framework/src/components/buttons/btn-cancelar/btn-cancelar.ts","../../../projects/appproject-framework/src/components/buttons/btn-cancelar/btn-cancelar.html","../../../projects/appproject-framework/src/components/buttons/btn-excluir/btn-excluir.ts","../../../projects/appproject-framework/src/components/buttons/btn-excluir/btn-excluir.html","../../../projects/appproject-framework/src/components/buttons/btn-novo/btn-novo.ts","../../../projects/appproject-framework/src/components/buttons/btn-novo/btn-novo.html","../../../projects/appproject-framework/src/components/buttons/btn-salvar/btn-salvar.ts","../../../projects/appproject-framework/src/components/buttons/btn-salvar/btn-salvar.html","../../../projects/appproject-framework/src/components/buttons/btn-rounded/btn-rounded.ts","../../../projects/appproject-framework/src/components/buttons/btn-rounded/btn-rounded.html","../../../projects/appproject-framework/src/components/titulo/titulo.ts","../../../projects/appproject-framework/src/components/titulo/titulo.html","../../../projects/appproject-framework/src/public-api.ts","../../../projects/appproject-framework/src/appproject-framework.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'kb-appproject-framework',\n imports: [],\n template: ` <p>appproject-framework works!</p> `,\n styles: ``,\n})\nexport class AppprojectFramework {}\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibService {\r\n\r\n constructor() { }\r\n\r\n //formatação de campos\r\n static decimalToStringMil(number?: any) {\r\n if (number != null) {\r\n if (number == 0 || number == '0') {\r\n return '0,00';\r\n }\r\n //console.log(number);\r\n let numero = number.toFixed(2).split('.');\r\n numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.');\r\n return numero.join(',').replace('-.', '-');\r\n } else\r\n return '';\r\n }\r\n\r\n static strToFloatZeroPontuacao(str: string | any): number {\r\n if (Number.isFinite(str))\r\n return str;\r\n if (this.isEmpty(str))\r\n return 0;\r\n else {\r\n //a string tem 2 casas decimais\r\n let semPontos = str.replace('.', '').replace(',', '');\r\n return this.round((parseInt(semPontos) / 100), 2);\r\n }\r\n }\r\n\r\n static isEmpty(str: string | any): boolean {\r\n return str == null || str == '';\r\n }\r\n\r\n static round(value: number, decimals: number): number {\r\n return Number(Math.round(Number(value + 'e' + decimals)) + 'e-' + decimals);\r\n }\r\n\r\n static stringToDecimal(strVal: string, parse: boolean = false): any {\r\n if (Number.isFinite(strVal)) {\r\n return strVal;\r\n }\r\n if (!this.isEmpty(strVal)) {\r\n //\r\n let avalor = strVal.split(',');\r\n let valor = avalor[0].replace('.', '');\r\n let decimal = '00';\r\n if (avalor.length > 1) {\r\n decimal = avalor[1];\r\n }\r\n //return strVal.replace(',', '.');\r\n const result = `${valor}.${decimal}`;\r\n if (parse) {\r\n return parseFloat(result);\r\n } else {\r\n return result;\r\n }\r\n }\r\n else\r\n return null;\r\n }\r\n}\r\n","import \"reflect-metadata\";\r\n\r\nconst requiredMetadataKey = Symbol(\"required\");\r\nconst minLengthMetadataKey = Symbol(\"minLength\");\r\nconst maxLengthMetadataKey = Symbol(\"maxLength\");\r\nconst emailMetadataKey = Symbol(\"email\");\r\nconst patternMetadataKey = Symbol(\"pattern\");\r\nconst ignoreMetadataKey = Symbol(\"ignore\");\r\nconst minMetadataKey = Symbol(\"min\");\r\nconst maxMetadataKey = Symbol(\"max\");\r\n//para campos numericos formatados\r\nconst formattedMetadataKey = Symbol(\"format\");\r\n\r\n//para criar tela\r\nconst tipoMetadataKey = Symbol(\"tipo\");\r\nconst posicaoMetadataKey = Symbol(\"posicao\");\r\nconst labelMetadataKey = Symbol(\"label\");\r\nconst readOnlyMetadataKey = Symbol(\"readOnly\");\r\nconst placeholderMetadataKey = Symbol(\"placeholder\");\r\n\r\n//anotação de required\r\nexport function required(erroMsg: string) {\r\n return Reflect.metadata(requiredMetadataKey, erroMsg);\r\n}\r\nexport function getRequired(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(requiredMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de minLength\r\n/**\r\n * \r\n * @param props Objeto { size: number, message: string }\r\n * @returns \r\n */\r\nexport function minLength(props: any) {\r\n return Reflect.metadata(minLengthMetadataKey, props);\r\n}\r\n\r\nexport function getMinLength(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(minLengthMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de maxLength\r\n//anotação de maxLength\r\n/**\r\n * \r\n * @param props Objeto { size: number, message: string }\r\n * @returns \r\n */\r\nexport function maxLength(props: any) {\r\n return Reflect.metadata(maxLengthMetadataKey, props);\r\n}\r\n\r\nexport function getMaxLength(target:any, propertyKey: string) {\r\n return Reflect.getMetadata(maxLengthMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de email\r\nexport function email(msg: string) {\r\n return Reflect.metadata(emailMetadataKey, msg);\r\n}\r\nexport function getEmail(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(emailMetadataKey, target, propertyKey);\r\n}\r\n//anotação de pattern\r\nexport function pattern(props: any) {\r\n return Reflect.metadata(patternMetadataKey, props);\r\n}\r\nexport function getPattern(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(patternMetadataKey, target, propertyKey);\r\n}\r\n//anotação de ignore\r\nexport function ignore() {\r\n return Reflect.metadata(ignoreMetadataKey, true);\r\n}\r\nexport function getIgnore(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(ignoreMetadataKey, target, propertyKey);\r\n}\r\n//anotação do tipo\r\nexport function tipo(controle: string) {\r\n return Reflect.metadata(tipoMetadataKey, controle);\r\n}\r\n\r\nexport function getTipo(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(tipoMetadataKey, target, propertyKey);\r\n}\r\n\r\n/**\r\n * \r\n * @param posRowColSize Objeto { row: 1, col: 1, size: 6 }\r\n * @returns \r\n */\r\nexport function posicao(posRowColSize: any) {\r\n return Reflect.metadata(posicaoMetadataKey, posRowColSize);\r\n}\r\n\r\nexport function getPosicao(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(posicaoMetadataKey, target, propertyKey);\r\n}\r\n\r\n/**\r\n * \r\n * @param label Label do campo que vai mostrar no form\r\n * @returns \r\n */\r\nexport function label(label: string) {\r\n return Reflect.metadata(labelMetadataKey, label);\r\n}\r\n\r\nexport function getLabel(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(labelMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de min\r\n/**\r\n * \r\n * @param props Objeto { valor: number, message?: string }\r\n * @returns \r\n */\r\nexport function min(props: any) {\r\n return Reflect.metadata(minMetadataKey, props);\r\n}\r\n\r\nexport function getMin(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(minMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de maxLength\r\n//anotação de min\r\n/**\r\n * \r\n * @param props Objeto { valor: number, message?: string }\r\n * @returns \r\n */\r\nexport function max(props: any) {\r\n return Reflect.metadata(maxMetadataKey, props);\r\n}\r\n\r\nexport function getMax(target:any, propertyKey: string) {\r\n return Reflect.getMetadata(maxMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação format\r\nexport function formatted(campo: string) {\r\n return Reflect.metadata(formattedMetadataKey, campo);\r\n}\r\nexport function getFormatted(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(formattedMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de read-only\r\nexport function readOnly() {\r\n return Reflect.metadata(readOnlyMetadataKey, true);\r\n}\r\nexport function getReadOnly(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(readOnlyMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de placeholder\r\nexport function placeholder(placeholder: string) {\r\n return Reflect.metadata(placeholderMetadataKey, placeholder);\r\n}\r\nexport function getPlaceholder(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(placeholderMetadataKey, target, propertyKey);\r\n}","import { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport * as decorators from './decorators';\r\nimport { PesquisaCampo } from './pesquisa-campo';\r\nimport { LibService } from '../services/lib.service';\r\nimport { HtmlRow } from './html-row';\r\nimport { HtmlCampo } from './html-campo';\r\nexport class BaseModel {\r\n Id: number | null;\r\n static CampoId: string = 'Id';\r\n static PesquisaCampos: PesquisaCampo[] = [];\r\n constructor(\r\n ) {\r\n this.Id = null;\r\n }\r\n\r\n\r\n getValidationMessages(): object {\r\n let validationMessages: any = {};\r\n\r\n\r\n Object.keys(this).forEach(name => {\r\n // console.log('msg campo', name);\r\n let messages: any[] = [];\r\n let req = decorators.getRequired(this, name);\r\n if (req) {\r\n messages.push({ type: 'required', message: req });\r\n }\r\n let minLength = decorators.getMinLength(this, name);\r\n if (minLength) {\r\n messages.push({ type: 'minlength', message: (minLength.message ? minLength.message : `Deve ter pelo menos ${minLength.size} caracteres`) });\r\n }\r\n let maxLength = decorators.getMaxLength(this, name);\r\n if (maxLength) {\r\n messages.push({ type: 'maxlength', message: `Deve ter no máximo ${maxLength} caracteres` });\r\n }\r\n let email = decorators.getEmail(this, name);\r\n if (email) {\r\n messages.push({ type: 'email', message: email });\r\n }\r\n let pattern = decorators.getPattern(this, name);\r\n if (pattern) {\r\n messages.push({ type: 'pattern', message: pattern.message })\r\n }\r\n let min = decorators.getMin(this, name);\r\n if (min) {\r\n messages.push({ type: 'min', message: (min.message ? min.message : `O Valor deve ser maior ou igual que ${min.valor}`) });\r\n }\r\n let max = decorators.getMax(this, name);\r\n if (max) {\r\n messages.push({ type: 'max', message: (max.message ? max.message : `O Valor deve ser menor ou igual que ${max.valor}`) });\r\n }\r\n\r\n validationMessages[name] = messages;\r\n });\r\n return validationMessages;\r\n }\r\n\r\n getForm(): FormGroup {\r\n const group: any = {};\r\n\r\n Object.keys(this).forEach(name => {\r\n // console.log('campo', name);\r\n let validators: any[] = [];\r\n let req = decorators.getRequired(this, name);\r\n if (req) {\r\n validators.push(Validators.required);\r\n }\r\n let minLength = decorators.getMinLength(this, name);\r\n if (minLength) {\r\n validators.push(Validators.minLength(minLength.size));\r\n }\r\n let maxLength = decorators.getMaxLength(this, name);\r\n if (maxLength) {\r\n validators.push(Validators.maxLength(maxLength));\r\n }\r\n let email = decorators.getEmail(this, name);\r\n if (email) {\r\n validators.push(Validators.email);\r\n }\r\n let pattern = decorators.getPattern(this, name);\r\n if (pattern) {\r\n validators.push(Validators.pattern(pattern.expression));\r\n }\r\n let min = decorators.getMin(this, name);\r\n if (min) {\r\n console.log('min', min)\r\n validators.push(Validators.min(min.valor));\r\n }\r\n let max = decorators.getMax(this, name);\r\n if (max) {\r\n console.log('max', max)\r\n validators.push(Validators.max(max.valor));\r\n }\r\n let ignore = decorators.getIgnore(this, name);\r\n if (!ignore) {\r\n group[name] = new FormControl('', validators);\r\n }\r\n });\r\n\r\n let form = new FormGroup(group);\r\n\r\n console.log(form);\r\n\r\n return form;\r\n }\r\n\r\n getHtmlForm(): HtmlRow[] {\r\n const rows: HtmlRow[] = [];\r\n const result: HtmlCampo[] = [];\r\n\r\n Object.keys(this).forEach(name => {\r\n // console.log('campo', name); \r\n let ignore = decorators.getIgnore(this, name);\r\n if (!ignore) {\r\n\r\n let tipo = decorators.getTipo(this, name);\r\n if (tipo) {\r\n let campo: HtmlCampo = { Nome: name, Tipo: tipo, ReadOnly: false, PlaceHolderVisivel: true, InputAction: false };\r\n\r\n\r\n let posicao = decorators.getPosicao(this, name);\r\n if (posicao) {\r\n campo.Row = posicao.row;\r\n campo.Col = posicao.col;\r\n campo.Size = posicao.size ?? 12;\r\n }\r\n\r\n let label = decorators.getLabel(this, name);\r\n if (label) {\r\n campo.Label = label;\r\n }\r\n\r\n let placeholder = decorators.getPlaceholder(this, name);\r\n if (placeholder) {\r\n campo.PlaceHolder = placeholder;\r\n }\r\n\r\n let maxLength = decorators.getMaxLength(this, name);\r\n if (maxLength) {\r\n campo.Tamanho = maxLength;\r\n }\r\n\r\n let readOnly = decorators.getReadOnly(this, name);\r\n if (readOnly) {\r\n campo.ReadOnly = true;\r\n }\r\n\r\n result.push(campo);\r\n }\r\n\r\n // let maxLength = decorators.getMaxLength(this, name);\r\n // if (maxLength) {\r\n\r\n // }\r\n // let email = decorators.getEmail(this, name);\r\n // if (email) {\r\n\r\n // }\r\n\r\n } else {\r\n let tipo = decorators.getTipo(this, name);\r\n if (tipo == 'sub-titulo') {\r\n let label = decorators.getLabel(this, name);\r\n const campo: HtmlCampo = { Nome: name, Tipo: tipo, ReadOnly: false, PlaceHolderVisivel: false };\r\n if (label) {\r\n campo.Label = label;\r\n }\r\n result.push(campo);\r\n } else if (tipo == 'input-button') {\r\n let label = decorators.getLabel(this, name);\r\n const campo: HtmlCampo = { Nome: name, Tipo: tipo, ReadOnly: false, PlaceHolderVisivel: false };\r\n if (label) {\r\n campo.Label = label;\r\n }\r\n let posicao = decorators.getPosicao(this, name);\r\n if (posicao) {\r\n campo.Row = posicao.row;\r\n campo.Col = posicao.col;\r\n campo.Size = posicao.size ?? 12;\r\n }\r\n result.push(campo);\r\n }\r\n\r\n }\r\n });\r\n\r\n //ordenar por row, col \r\n const ordered = result.sort((l, r) => (l.Row ?? 0) > (r.Row ?? 0) ? 1 : ((l.Row ?? 0) < (r.Row ?? 0) ? -1 : 0));\r\n let linhas: number[] = [];\r\n ordered.forEach(r => {\r\n if (linhas.indexOf(r.Row ?? 0) < 0) {\r\n linhas.push(r.Row ?? 0);\r\n }\r\n });\r\n\r\n let currentLinha = 0;\r\n linhas.forEach(r => {\r\n //pesquisar os campos da mesma linha e ordenar por coluna\r\n const cols = result.filter(c => c.Row == r).sort((l, r) => (l.Col ?? 0) > (r.Col ?? 0) ? 1 : ((l.Col ?? 0) < (r.Col ?? 0) ? -1 : 0));\r\n //verificar a sequencia das colunas para inserir coluna em branco\r\n let colsGaps: HtmlCampo[] = [];\r\n let currentCol = 0;\r\n cols.forEach(c => {\r\n currentCol++;\r\n while (currentCol < (c.Col ?? 0)) {\r\n currentCol++;\r\n colsGaps.push({ Nome: \"WhiteSpace\", Tipo: \"col\", Size: \"1\", ReadOnly: true, PlaceHolderVisivel: true });\r\n }\r\n colsGaps.push(c);\r\n })\r\n\r\n rows.push({ Linha: colsGaps });\r\n })\r\n\r\n return rows;\r\n }\r\n\r\n static setCamposFormatados(obj: any) {\r\n Object.keys(obj).forEach(name => {\r\n //console.log(name);\r\n const formatted = decorators.getFormatted(obj, name);\r\n if (formatted) {\r\n //console.log(name, formatted);\r\n obj[name] = LibService.decimalToStringMil(obj[formatted]);\r\n }\r\n });\r\n }\r\n\r\n static getCamposFormatados(obj: any) {\r\n Object.keys(obj).forEach(name => {\r\n //console.log(name);\r\n const formatted = decorators.getFormatted(obj, name);\r\n if (formatted) {\r\n obj[formatted] = LibService.strToFloatZeroPontuacao(obj[name]);\r\n }\r\n });\r\n }\r\n\r\n setCamposFormatados() {\r\n Object.keys(this).forEach(name => {\r\n //console.log(name);\r\n const formatted = decorators.getFormatted(this, name);\r\n if (formatted) {\r\n //console.log(name, formatted);\r\n this[name as keyof typeof this] = LibService.decimalToStringMil(this[formatted as keyof typeof this]);\r\n }\r\n });\r\n }\r\n\r\n getCamposFormatados() {\r\n Object.keys(this).forEach(name => {\r\n //console.log(name);\r\n const formatted = decorators.getFormatted(this, name);\r\n if (formatted) {\r\n //console.log(formatted, name);\r\n this[formatted as keyof typeof this] = LibService.strToFloatZeroPontuacao(this[name as keyof typeof this]) as any;\r\n }\r\n });\r\n }\r\n\r\n getFromJson(obj: any) {\r\n Object.keys(this).forEach(name => {\r\n if (obj.hasOwnProperty(name)) {\r\n this[name as keyof typeof this] = obj[name];\r\n }\r\n });\r\n }\r\n\r\n}","export class HtmlCampo {\r\n /**\r\n * Nome do campo que o controle faz binding formControlName\r\n */\r\n Nome!: string;\r\n /**\r\n * Tipo do controle da lib que deve ser desenhado. [input-text, input-select, input-pesquisa, input-area, input-checkbox, input-format, input-valor]\r\n */\r\n Tipo!: string;\r\n /**\r\n * Título do campo que será exibido\r\n */\r\n Label?: string;\r\n /**\r\n * Para input-select, array de objetos para a lista\r\n */\r\n Itens?: any[];\r\n /**\r\n * Para input-select, campo de id do objeto da lista. ex: 'Id', 'UsuarioId'\r\n */\r\n ItemId?: string;\r\n /**\r\n * Para input-select, campo que sera exibido no combo, ex: 'Nome', 'Descricao'\r\n */\r\n ItemNome?: string;\r\n /**\r\n * Tamanho digitável do campo, quantidade de caracteres\r\n */\r\n Tamanho?: string;\r\n ReadOnly: boolean = false;\r\n PlaceHolderVisivel: boolean = true;\r\n /**\r\n * Placeholder do campo, se não informado será o mesmo do label\r\n */\r\n PlaceHolder?: string;\r\n /**\r\n * Para input-text ['text', 'date', 'number']\r\n */\r\n TipoInput?: string;\r\n //posicionamento\r\n /**\r\n * Linha sequencial da posição do controle\r\n */\r\n Row?: number;\r\n /**\r\n * Coluna sequencial da posição do controle, pode ter furo na sequência, será tratado como um espaço\r\n */\r\n Col?: number;\r\n /**\r\n * Tamanho da coluna. col-md\r\n */\r\n Size?: string;\r\n /**\r\n * Linhas do input-area\r\n */\r\n Linhas?: number;\r\n /**\r\n * Para componente de pesquisa\r\n */\r\n UrlPesquisa?: string;\r\n UrlItem?: string;\r\n TipoPesquisa?: string;\r\n\r\n /**\r\n * Campo que será focado após o carregamento do form\r\n */\r\n focusField?: boolean;\r\n /**\r\n * Deve obter o foco \r\n */\r\n CampoFoco?: string;\r\n /**\r\n * Mascara para o Input Format\r\n */\r\n Formato?: string;\r\n\r\n //estilos\r\n /**\r\n * Estilo do label do separador\r\n */\r\n LabelStyle?: string;\r\n /**\r\n * Estilo geral do campo\r\n */\r\n CampoStyle?: string;\r\n\r\n //para botões\r\n /**\r\n * Nome do icon para o botão\r\n */\r\n Icon?: string;\r\n /**\r\n * Caminho do icon ex: assets/icons/icon.svg\r\n */\r\n IconSrc?: string;\r\n /**\r\n * Cor do botão: primary, secondary, light, tertiary, danger, warning, success\r\n */\r\n BtnColor?: string;\r\n /**\r\n * Expansão do botão: full, block, inline\r\n */\r\n BtnExpand?: string;\r\n /**\r\n * Tamanho do button, small, large, default\r\n */\r\n BtnSize?: string;\r\n //para action do input text\r\n /**\r\n * Exibir o botão do lado do input-text\r\n */\r\n InputAction?: boolean = false;\r\n /**\r\n * Ícone do botão de action\r\n */\r\n InputActionIcon?: string; \r\n /**\r\n * Flag para esconder o campo em tela\r\n */\r\n Hidden?: boolean = false;\r\n /**\r\n * Declaração para tratemento de change, quando implementado no cliente será chamado.\r\n * @param event Parâmetros emitidos com o change\r\n */\r\n change?(event: any) {\r\n\r\n }\r\n /**\r\n * Declaração para tratamento de click do botão\r\n * @param event \r\n */\r\n click?(event: any) {\r\n\r\n }\r\n}","import { HtmlCampo } from \"./html-campo\";\r\n\r\nexport class HtmlRow {\r\n Linha: HtmlCampo[] = [];\r\n}","export class PesquisaCampo {\r\n campo!: string;\r\n label!: string;\r\n format?: boolean;\r\n formatacao?: Function;\r\n width?: string;\r\n}","export class PageResult {\r\n pagina!: number\r\n totalRec!: number;\r\n lista: any[] = [];\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'nome',\r\n standalone: true\r\n})\r\nexport class NomePipe implements PipeTransform {\r\n\r\n transform(value: string, ...args: unknown[]): unknown {\r\n if (!value)\r\n return \"\";\r\n return value.split(' ')[0];\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LibService } from '../services/lib.service';\r\n\r\n@Pipe({\r\n name: 'valorFormat',\r\n standalone: true\r\n})\r\nexport class ValorFormatPipe implements PipeTransform {\r\n\r\n transform(value: number, ...args: unknown[]): any {\r\n //console.log('valorFormat', value);\r\n\r\n if (value != null) {\r\n if (Number.isFinite(value)) {\r\n try {\r\n return LibService.decimalToStringMil(value);\r\n } catch {\r\n return value;\r\n }\r\n } else {\r\n return value;\r\n }\r\n\r\n }\r\n return null;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safeHtml',\r\n standalone: true\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n\r\n constructor(private sanitized: DomSanitizer) { }\r\n \r\n transform(value: string, ...args: unknown[]): unknown {\r\n return this.sanitized.bypassSecurityTrustHtml(value);\r\n }\r\n\r\n}\r\n","export class Tree {\r\n Id!: number;\r\n Pai: number | null = null;\r\n Label!: string;\r\n Filhos: Tree[] = [];\r\n Expandido: boolean = false;\r\n Clicable: boolean = true;\r\n}","export class GridFiltroValor {\r\n Selecionado?: boolean;\r\n Valor?: any;\r\n}\r\nexport class GridColuna {\r\n Campo!: string; \r\n Titulo!: string; \r\n Tamanho?: string = '10%';\r\n Ordem?: boolean = true;\r\n Filtrar?: boolean = true; \r\n OrdemStatus?: 0 | 1 | -1 = 0;\r\n Tipo?: 'data' | 'number' | 'boolean' | 'string' = 'string';\r\n Valores?: GridFiltroValor[] = []; \r\n FiltroOperador?: string = '='; \r\n FiltroValor?: string = ''; \r\n FiltroVisivel?: boolean = false;\r\n Grupo?: boolean = false; \r\n Pipe?: string;\r\n PipeParams?: string = \"\";\r\n Alinhamento?: string;\r\n Default?: string = \"\";\r\n RenderFunction?(item: any): string {\r\n return '';\r\n };\r\n ClickFunction?(item: any) {\r\n \r\n };\r\n}\r\n\r\nexport class GridTabela {\r\n Selecionar?: boolean = false;\r\n Exportar?: boolean = false;\r\n CampoSelecionar?: string;\r\n Colunas!: GridColuna[];\r\n Excluir?: boolean = false;\r\n \r\n static init(grid: GridTabela) {\r\n console.log('init grid');\r\n if (grid.Selecionar == undefined) {\r\n grid.Selecionar = false;\r\n }\r\n if (grid.Exportar == undefined) {\r\n grid.Exportar = false;\r\n }\r\n if (grid.Excluir == undefined) {\r\n grid.Excluir = false;\r\n }\r\n\r\n if (grid.Colunas) {\r\n for (let col of grid.Colunas) {\r\n if (col.Tamanho == undefined) {\r\n col.Tamanho = \"10%\";\r\n }\r\n if (col.Ordem == undefined) {\r\n col.Ordem = true; \r\n }\r\n if (col.Filtrar == undefined) {\r\n col.Filtrar = true; \r\n }\r\n if (col.OrdemStatus == undefined) {\r\n col.OrdemStatus = 0;\r\n }\r\n if (col.Tipo == undefined) {\r\n col.Tipo = 'string';\r\n }\r\n if (col.Valores == undefined) {\r\n col.Valores = []; \r\n }\r\n if (col.FiltroOperador == undefined) {\r\n col.FiltroOperador = '='; \r\n }\r\n if (col.FiltroValor == undefined) {\r\n col.FiltroValor = ''; \r\n }\r\n if (col.FiltroVisivel == undefined) {\r\n col.FiltroVisivel = false;\r\n }\r\n if (col.Grupo == undefined) {\r\n col.Grupo = false; \r\n } \r\n if (col.PipeParams == undefined) {\r\n col.PipeParams = \"\";\r\n }\r\n if (col.Default == undefined) {\r\n col.Default = \"\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n static valoresFiltro(grid: GridTabela, dataSet: any[]) {\r\n console.log('init filtro grid', grid);\r\n grid.Colunas.forEach(c => {\r\n if (c.Filtrar) {\r\n //projetar a coluna\r\n let initial = [];\r\n let valores = dataSet.map(d => d[c.Campo]);\r\n c.Valores = valores.filter((value, index, self) => {\r\n return self.indexOf(value) === index;\r\n }).map(v => { return { Selecionado: false, Valor: v } });\r\n // console.log(c.Campo, valores);\r\n // console.log(c.Valores)\r\n }\r\n })\r\n }\r\n}\r\n","export class EventoCadastro {\r\n Cadastro!: string;\r\n Id!: number; \r\n}\r\n","export class EventoFoco {\r\n Campo!: string;\r\n}\r\n","export class Intervalo {\r\n valor!: number;\r\n selecionado: boolean = false;\r\n tipo: 'dia' | 'sem' | 'mes' = 'dia';\r\n}","export class Dominio {\n Id: number;\n Descricao: string;\n IdStr?: string;\n\n constructor(id: number, descricao: string, idStr?: string) {\n this.Id = id;\n this.Descricao = descricao;\n this.IdStr = idStr;\n }\n}","import { Injectable, Service } from '@angular/core';\r\nimport { Dominio } from './dominio';\r\nimport { EstadoLib } from './estado';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilsGeralService {\r\n constructor() { }\r\n\r\n getMeses(): Dominio[] {\r\n let meses: Dominio[] = [];\r\n meses.push(new Dominio(1, 'Janeiro'));\r\n meses.push(new Dominio(2, 'Fevereiro'));\r\n meses.push(new Dominio(3, 'Março'));\r\n meses.push(new Dominio(4, 'Abril'));\r\n meses.push(new Dominio(5, 'Maio'));\r\n meses.push(new Dominio(6, 'Junho'));\r\n meses.push(new Dominio(7, 'Julho'));\r\n meses.push(new Dominio(8, 'Agosto'));\r\n meses.push(new Dominio(9, 'Setembro'));\r\n meses.push(new Dominio(10, 'Outubro'));\r\n meses.push(new Dominio(11, 'Novembro'));\r\n meses.push(new Dominio(12, 'Dezembro'));\r\n return meses;\r\n }\r\n\r\n resolveMes(mes: number): string {\r\n switch (mes) {\r\n case 1: return 'Janeiro';\r\n case 2: return 'Fevereiro';\r\n case 3: return 'Março';\r\n case 4: return 'Abril';\r\n case 5: return 'Maio';\r\n case 6: return 'Junho';\r\n case 7: return 'Julho';\r\n case 8: return 'Agosto';\r\n case 9: return 'Setembro';\r\n case 10: return 'Outubro';\r\n case 11: return 'Novembro';\r\n case 12: return 'Dezembro';\r\n default: return '';\r\n }\r\n }\r\n\r\n getAnos(inicio: number, fim: number): Dominio[] {\r\n let anos: Dominio[] = [];\r\n for (let i = inicio; i <= fim; i++) {\r\n anos.push(new Dominio(i, i.toString()));\r\n }\r\n return anos;\r\n }\r\n getEstados(): EstadoLib[] {\r\n let estados = [];\r\n\r\n estados.push({ EstadoId: 1, Nome: 'Acre', Sigla: 'AC' });\r\n estados.push({ EstadoId: 2, Nome: 'Alagoas', Sigla: 'AL' });\r\n estados.push({ EstadoId: 3, Nome: 'Amazonas', Sigla: 'AM' });\r\n estados.push({ EstadoId: 4, Nome: 'Bahia', Sigla: 'BA' });\r\n estados.push({ EstadoId: 5, Nome: 'Ceará', Sigla: 'CE' });\r\n estados.push({ EstadoId: 6, Nome: 'Distrito Federal', Sigla: 'DF' });\r\n estados.push({ EstadoId: 7, Nome: 'Espírito Santo', Sigla: 'ES' });\r\n estados.push({ EstadoId: 8, Nome: 'Goiás', Sigla: 'GO' });\r\n estados.push({ EstadoId: 9, Nome: 'Maranhão', Sigla: 'MA' });\r\n estados.push({ EstadoId: 10, Nome: 'Mato Grosso', Sigla: 'MT' });\r\n estados.push({ EstadoId: 11, Nome: 'Mato Grosso do Sul', Sigla: 'MS' });\r\n estados.push({ EstadoId: 12, Nome: 'Minas Gerais', Sigla: 'MG' });\r\n estados.push({ EstadoId: 13, Nome: 'Pará', Sigla: 'PA' });\r\n estados.push({ EstadoId: 14, Nome: 'Paraíba', Sigla: 'PB' });\r\n estados.push({ EstadoId: 15, Nome: 'Paraná', Sigla: 'PR' });\r\n estados.push({ EstadoId: 16, Nome: 'Pernambucp', Sigla: 'PE' });\r\n estados.push({ EstadoId: 17, Nome: 'Piauí', Sigla: 'PI' });\r\n estados.push({ EstadoId: 18, Nome: 'Rio de Janeiro', Sigla: 'RJ' });\r\n estados.push({ EstadoId: 19, Nome: 'Rio Grande do Norte', Sigla: 'RN' });\r\n estados.push({ EstadoId: 20, Nome: 'Rio Grande do Sul', Sigla: 'RS' });\r\n estados.push({ EstadoId: 21, Nome: 'Rondônia', Sigla: 'RO' });\r\n estados.push({ EstadoId: 22, Nome: 'Roraima', Sigla: 'RR' });\r\n estados.push({ EstadoId: 23, Nome: 'Santa Catarina', Sigla: 'SC' });\r\n estados.push({ EstadoId: 24, Nome: 'São Paulo', Sigla: 'SP' });\r\n estados.push({ EstadoId: 25, Nome: 'Sergipe', Sigla: 'SE' });\r\n estados.push({ EstadoId: 26, Nome: 'Tocantins', Sigla: 'TO' });\r\n\r\n return estados;\r\n\r\n }\r\n //strings\r\n isEmpty(str: string | null | undefined): boolean {\r\n return str == null || str == undefined || str == '';\r\n }\r\n\r\n //validações\r\n validarCNPJ(cnpj: string) {\r\n\r\n cnpj = cnpj.replace(/[^\\d]+/g, '');\r\n\r\n if (cnpj == '') return false;\r\n\r\n if (cnpj.length != 14)\r\n return false;\r\n\r\n // Elimina CNPJs invalidos conhecidos\r\n if (cnpj == \"00000000000000\" ||\r\n cnpj == \"11111111111111\" ||\r\n cnpj == \"22222222222222\" ||\r\n cnpj == \"33333333333333\" ||\r\n cnpj == \"44444444444444\" ||\r\n cnpj == \"55555555555555\" ||\r\n cnpj == \"66666666666666\" ||\r\n cnpj == \"77777777777777\" ||\r\n cnpj == \"88888888888888\" ||\r\n cnpj == \"99999999999999\")\r\n return false;\r\n\r\n // Valida DVs\r\n let tamanho = cnpj.length - 2\r\n let numeros = cnpj.substring(0, tamanho);\r\n let digitos = cnpj.substring(tamanho);\r\n let soma = 0;\r\n let pos = tamanho - 7;\r\n for (let i = tamanho; i >= 1; i--) {\r\n soma += parseInt(numeros.charAt(tamanho - i)) * pos--;\r\n if (pos < 2)\r\n pos = 9;\r\n }\r\n let resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;\r\n if (resultado != parseInt(digitos.charAt(0)))\r\n return false;\r\n\r\n tamanho = tamanho + 1;\r\n numeros = cnpj.substring(0, tamanho);\r\n soma = 0;\r\n pos = tamanho - 7;\r\n for (let i = tamanho; i >= 1; i--) {\r\n soma += parseInt(numeros.charAt(tamanho - i)) * pos--;\r\n if (pos < 2)\r\n pos = 9;\r\n }\r\n resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;\r\n if (resultado != parseInt(digitos.charAt(1)))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n validarCPF(cpf: string) {\r\n let soma: number = 0;\r\n let resto: number;\r\n\r\n cpf = cpf.replace(/[^\\d]+/g, '');\r\n\r\n if (cpf == '') return false;\r\n\r\n if (cpf.length != 11)\r\n return false;\r\n\r\n if (cpf == \"00000000000\") return false;\r\n\r\n for (let i = 1; i <= 9; i++) {\r\n soma = soma + parseInt(cpf.substring(i - 1, i)) * (11 - i);\r\n }\r\n resto = (soma * 10) % 11;\r\n\r\n if ((resto == 10) || (resto == 11)) {\r\n resto = 0;\r\n }\r\n if (resto != parseInt(cpf.substring(9, 10))) {\r\n return false;\r\n }\r\n\r\n soma = 0;\r\n for (let i = 1; i <= 10; i++) {\r\n soma = soma + parseInt(cpf.substring(i - 1, i)) * (12 - i);\r\n }\r\n resto = (soma * 10) % 11;\r\n\r\n if ((resto == 10) || (resto == 11)) {\r\n resto = 0;\r\n }\r\n if (resto != parseInt(cpf.substring(10, 11))) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n validatePessoaJuridica(cnpj: string) {\r\n return (group: FormGroup): { [key: string]: any } => {\r\n let vCnpj = group.controls[cnpj].value;\r\n\r\n if (!this.validarCNPJ(vCnpj)) {\r\n return {\r\n invalidCnpj: true\r\n }\r\n }\r\n return { };\r\n\r\n }\r\n }\r\n\r\n validatePessoaFisicaJuridica(tipo: string, cnpj: string, cpf: string, obrigatorio: boolean = false) {\r\n return (group: FormGroup): { [key: string]: any } => {\r\n let vCnpj = group.controls[cnpj].value;\r\n let vCpf = group.controls[cpf].value;\r\n let tipoPessoa = group.controls[tipo].value;\r\n\r\n if (tipoPessoa == 'J') {\r\n // console.log('testa cnpj');\r\n if (this.isEmpty(vCnpj) && obrigatorio) {\r\n return {\r\n invalidCnpj: true\r\n }\r\n }\r\n if (!this.validarCNPJ(vCnpj)) {\r\n return {\r\n invalidCnpj: true\r\n }\r\n }\r\n }\r\n\r\n if (tipoPessoa == 'F') {\r\n // console.log('testa cpf');\r\n if (this.isEmpty(vCpf) && obrigatorio) {\r\n return {\r\n invalidCpf: true\r\n }\r\n }\r\n if (!this.validarCPF(vCpf)) {\r\n return {\r\n invalidCpf: true\r\n }\r\n }\r\n }\r\n\r\n return { };\r\n }\r\n }\r\n\r\n validateSenhas(senha: string, senhaConfirma: string) {\r\n // console.log(senha, senhaConfirma)\r\n return (group: FormGroup): { [key: string]: any } => {\r\n let vSenha = group.controls[senha].value;\r\n let vSenhaConfirma = group.controls[senhaConfirma].value;\r\n\r\n if (!this.isEmpty(vSenha) && vSenha != vSenhaConfirma) {\r\n return {\r\n invalidSenhas: true\r\n }\r\n }\r\n\r\n return { }\r\n }\r\n }\r\n\r\n validateSenhasTamanho(senha: string, tamanho: number) {\r\n return (group: FormGroup): { [key: string]: any } => {\r\n let vSenha = group.controls[senha].value;\r\n console.log(vSenha)\r\n if (!this.isEmpty(vSenha) && vSenha.length < tamanho) {\r\n return {\r\n invalidSenhaTamanho: true\r\n }\r\n }\r\n return { };\r\n }\r\n }\r\n\r\n //formatação de texto\r\n formataCampoValor(valor: string, Mascara: string, evento: any) {\r\n console.log(valor);\r\n if (this.isEmpty(valor))\r\n return null;\r\n //console.log(evento);\r\n\r\n //if (!this.keypressInteiro(evento))\r\n // return;\r\n\r\n var boleanoMascara;\r\n\r\n var Digitato = evento != null ? evento.keyCode : 0;\r\n let exp = /\\-|\\.|\\/|\\(|\\)| /g\r\n let campoSoNumeros = valor.replace(exp, \"\");\r\n\r\n var posicaoCampo = 0;\r\n var NovoValorCampo = \"\";\r\n var TamanhoMascara = campoSoNumeros.length;;\r\n\r\n if (Digitato != 8) { // backspace \r\n for (let i = 0; i <= TamanhoMascara; i++) {\r\n boleanoMascara = ((Mascara.charAt(i) == \"-\") || (Mascara.charAt(i) == \".\")\r\n || (Mascara.charAt(i) == \"/\"))\r\n boleanoMascara = boleanoMascara || ((Mascara.charAt(i) == \"(\")\r\n || (Mascara.charAt(i) == \")\") || (Mascara.charAt(i) == \" \"))\r\n if (boleanoMascara) {\r\n NovoValorCampo += Mascara.charAt(i);\r\n TamanhoMascara++;\r\n } else {\r\n NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);\r\n posicaoCampo++;\r\n }\r\n }\r\n return NovoValorCampo;\r\n } else {\r\n return valor;\r\n }\r\n }\r\n\r\n\r\n converterValorDecimalMil(campo: string, casas: number = 2): string {\r\n if (!this.isEmpty(campo)) {\r\n //console.log('converterValorDecimal');\r\n //console.log('campo:', campo, ' replaced: ', campo.replace(',', '').replace('.', '')); \r\n if (campo == '-') {\r\n return campo;\r\n }\r\n\r\n let valor = parseFloat(campo.replace(',', '').replace('.', '').replace('.', '').replace('.', ''));\r\n\r\n let valordiv = parseInt(\"1\" + this.stringOfChar(\"0\", casas));\r\n //valor /= 100; \r\n console.log(valor, '/', valordiv);\r\n valor /= valordiv;\r\n console.log('=', valor);\r\n return this.decimalToStringMil(valor);\r\n /*\r\n var str = valor.toString().replace('.', ',');\r\n var aStr = str.split(',');\r\n if (aStr.length == 1) {\r\n //str += ',00';\r\n str += ',' + this.stringOfChar('0', casas);\r\n }\r\n else {\r\n //str += this.stringOfChar('0', 2 - aStr[1].length);\r\n str += this.stringOfChar('0', casas - aStr[1].length);\r\n }\r\n return str;\r\n */\r\n }\r\n else\r\n return campo;\r\n }\r\n\r\n converterValorDecimal(campo: string, casas: number = 2): string {\r\n if (!this.isEmpty(campo)) {\r\n //console.log('converterValorDecimal');\r\n //console.log(campo); \r\n var valor = parseInt(campo.replace(',', ''));\r\n var valordiv = parseInt(\"1\" + this.stringOfChar(\"0\", casas));\r\n //valor /= 100;\r\n valor /= valordiv;\r\n\r\n var str = valor.toString().replace('.', ',');\r\n var aStr = str.split(',');\r\n if (aStr.length == 1) {\r\n //str += ',00';\r\n str += ',' + this.stringOfChar('0', casas);\r\n }\r\n else {\r\n //str += this.stringOfChar('0', 2 - aStr[1].length);\r\n str += this.stringOfChar('0', casas - aStr[1].length);\r\n }\r\n return str;\r\n }\r\n else\r\n return campo;\r\n }\r\n\r\n mascaraZeros(valor: string, mascara?: string) {\r\n var pad = \"000000\";\r\n if (mascara != null) {\r\n pad = mascara;\r\n }\r\n return pad.substring(0, pad.length - valor.length) + valor;\r\n }\r\n //substituição de caracteres\r\n converteCaracteresEspeciais(nome: string): string {\r\n var res = nome.replace(/Ã/g, \"A\");\r\n res = res.replace(/Á/g, \"A\");\r\n res = res.replace(/Ç/g, \"C\");\r\n res = res.replace(/É/g, \"E\");\r\n res = res.replace(/Â/g, \"A\");\r\n res = res.replace(/Ô/g, \"O\");\r\n res = res.replace(/Ó/g, \"O\");\r\n res = res.replace(/Ú/g, \"U\");\r\n res = res.replace(/Í/g, \"I\");\r\n return res;\r\n }\r\n\r\n //getbase64fromfile\r\n getBase64FromFile(file: File) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n });\r\n }\r\n\r\n getTextFromFile(file: File, charset = 'utf') {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsText(file, 'ISO-8859-1');\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n });\r\n }\r\n\r\n stringOfChar(str: string, tam: number): string {\r\n var res = '';\r\n for (var i = 0; i < tam; i++) {\r\n res += str;\r\n }\r\n return res;\r\n }\r\n\r\n round(value: number, decimals: number): number {\r\n return Number(Math.round(Number(value + 'e' + decimals)) + 'e-' + decimals);\r\n }\r\n decimalToStringAny(valor?: any, casas: number = 2): string {\r\n if (valor != null) {\r\n var str = valor.toString().replace('.', ',');\r\n var aStr = str.split(',');\r\n if (aStr.length == 1) {\r\n str += ',' + this.stringOfChar('0', casas);\r\n }\r\n else {\r\n str += this.stringOfChar('0', casas - aStr[1].length);\r\n }\r\n return str;\r\n }\r\n else\r\n return '';\r\n }\r\n decimalToStringMil(number?: any) {\r\n if (number != null) {\r\n if (number == 0 || number == '0') {\r\n return '0,00';\r\n }\r\n //console.log(number);\r\n let numero = number.toFixed(2).split('.');\r\n numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.');\r\n return numero.join(',').replace('-.', '-');\r\n } else\r\n return '';\r\n }\r\n digitarNumero(event: any) {\r\n console.log(event);\r\n if ((event.keyCode >= 48 && event.keyCode <= 57)\r\n || (event.keyCode >= 96 && event.keyCode <= 105)\r\n || (event.keyCode == 8)\r\n || (event.keyCode == 9)\r\n || (event.keyCode == 39)\r\n || (event.keyCode == 37)) {\r\n\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n strToIntZero(str: any): number {\r\n if (Number.isFinite(str))\r\n return str;\r\n if (this.isEmpty(str))\r\n return 0;\r\n else\r\n return parseInt(str);\r\n }\r\n\r\n strToFloatZero(str: any): number {\r\n if (Number.isFinite(str))\r\n return str;\r\n if (this.isEmpty(str))\r\n return 0;\r\n else\r\n return parseFloat(str.replace('.', '').replace(',', '.'));\r\n }\r\n\r\n stringToDecimal(strVal: string): any {\r\n if (!this.isEmpty(strVal)) {\r\n //\r\n let avalor = strVal.split(',');\r\n let valor = avalor[0].replace('.', '');\r\n let decimal = '00';\r\n if (avalor.length > 1) {\r\n decimal = avalor[1];\r\n }\r\n //return strVal.replace(',', '.');\r\n return `${valor}.${decimal}`;\r\n }\r\n else\r\n return null;\r\n }\r\n\r\n dateToStr(date: Date, separador: string = '-'): string | null {\r\n if (date != null) {\r\n let mes = date.getMonth() + 1;\r\n if (separador == '/') {\r\n return (date.getDate() >= 10 ? date.getDate() : ('0' + date.getDate())) + '/' + (mes >= 10 ? mes : ('0' + mes)) + '/' +\r\n date.getFullYear();\r\n ;\r\n } else {\r\n return date.getFullYear() + '-' + (mes >= 10 ? mes : ('0' + mes)) + '-' +\r\n (date.getDate() >= 10 ? date.getDate() : ('0' + date.getDate()));\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n dateTimeToStr(date: Date, separador: string = '-'): string | null {\r\n if (date != null) {\r\n let mes = date.getMonth() + 1;\r\n if (separador == '/') {\r\n return (date.getDate() >= 10 ? date.getDate() : ('0' + date.getDate())) + '/' + (mes >= 10 ? mes : ('0' + mes)) + '/' +\r\n date.getFullYear();\r\n ;\r\n } else if (separador == \"-\") {\r\n return date.getFullYear() + '-' + (mes >= 10 ? mes : ('0' + mes)) + '-' +\r\n (date.getDate() >= 10 ? date.getDate() : ('0' + date.getDate())) + ' ' +\r\n (date.getHours() >= 10 ? date.getHours() : ('0' + date.getHours())) + ':' +\r\n (date.getMinutes() >= 10 ? date.getMinutes() : ('0' + date.getMinutes())) + ':' +\r\n (date.getSeconds() >= 10 ? date.getSeconds() : ('0' + date.getSeconds()));\r\n } else {\r\n return date.getFullYear().toString() + (mes >= 10 ? mes : ('0' + mes)) +\r\n (date.getDate() >= 10 ? date.getDate() : ('0' + date.getDate())) +\r\n (date.getHours() >= 10 ? date.getHours() : ('0' + date.getHours())) +\r\n (date.getMinutes() >= 10 ? date.getMinutes() : ('0' + date.getMinutes())) +\r\n (date.getSeconds() >= 10 ? date.getSeconds() : ('0' + date.getSeconds()));\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n inicioMesAnterior(mes: number, ano: number) {\r\n let date: Date = new Date(ano, mes, 1);\r\n date.setMonth(date.getMonth() - 1);\r\n return date;\r\n }\r\n\r\n getDataFromString(str: string, hrs?: string): Date | null {\r\n if (this.isEmpty(str)) {\r\n return null;\r\n }\r\n let parts = str.split('-');\r\n let result = new Date(parseInt(parts[0]), (parseInt(parts[1]) - 1), parseInt(parts[2]));\r\n if (this.isEmpty(hrs)) {\r\n return result;\r\n } else {\r\n const horas = hrs!; //not null assertion, como foi verificado com isEmpty, ele deve conter um valor string\r\n let hparts = horas.split(':');\r\n result.setHours(parseInt(hparts[0]));\r\n result.setMinutes(parseInt(hparts[1]));\r\n if (hparts.length > 2) {\r\n result.setSeconds(parseInt(hparts[2]));\r\n }\r\n return result;\r\n }\r\n }\r\n //forms\r\n setFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\r\n Object.keys(entity).forEach(name => {\r\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\r\n return;\r\n }\r\n if (form.controls[name]) {\r\n form.controls[name].patchValue(entity[name], { onlySelf: true, emitEvent: false });\r\n form.get(name)?.markAsPristine();\r\n form.get(name)?.markAsUntouched();\r\n //console.log(name, form.get(name).dirty)// \r\n }\r\n });\r\n }\r\n\r\n getFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\r\n //console.log(form, ' = ', entity);\r\n Object.keys(entity).forEach(name => {\r\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\r\n return;\r\n }\r\n if (form.controls[name]) {\r\n entity[name] = form.controls[name].value; \r\n }\r\n });\r\n //console.log('getFormValues', entity);\r\n }\r\n\r\n getFormValidationErrors(form: FormGroup, messages: any): string[] {\r\n let result: string[] = [];\r\n Object.keys(form.controls).forEach(key => {\r\n\r\n const controlErrors = form.get(key)?.errors;\r\n if (controlErrors != null) {\r\n Object.keys(controlErrors).forEach(keyError => {\r\n //console.log('Key control: ' + key + ', keyError: ' + keyError + ', err value: ', controlErrors[keyError]);\r\n if (messages[key]) {\r\n messages[key].forEach((msg: any) => {\r\n if (msg['type'] == keyError) {\r\n console.log(msg['message']);\r\n result.push(msg['message']);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n //data hora\r\n converterDataFromDB(data: string): string {\r\n if (this.isEmpty(data))\r\n return '';\r\n let aValue = data;\r\n let aData = data.split(' ');\r\n console.log(aData);\r\n if (aData.length > 1) {\r\n aValue = aData[0];\r\n }\r\n console.log(aValue);\r\n if (aValue.indexOf('-') >= 0) {\r\n var sData = aValue.split('-');\r\n return sData[2] + '/' + sData[1] + '/' + sData[0];\r\n } else {\r\n return aValue;\r\n }\r\n }\r\n\r\n converterHoraFromDB(data: string): string {\r\n if (this.isEmpty(data))\r\n return '';\r\n\r\n if (data.indexOf(' ') > 0) {\r\n let sData = data.split(' ');\r\n let aHora = sData[1].split(':');\r\n return aHora[0] + ':' + aHora[1];\r\n } else if (data.indexOf(':') > 0) {\r\n let aHora = data.split(':');\r\n return aHora[0] + ':' + aHora[1];\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n copy(origem: any, destino: any): void {\r\n //Object.assign(destino, origem); //copia os filhos tbm\r\n // Handle Object\r\n\r\n if (origem instanceof Object) {\r\n for (var attr in destino) {\r\n if (origem.hasOwnProperty(attr)) destino[attr] = origem[attr];\r\n }\r\n }\r\n\r\n }\r\n\r\n //dominio classificação\r\n translateClassificacao(classificacao: string) {\r\n switch (classificacao) {\r\n case 'S': return 'Outras';\r\n case 'O': return 'Operacional';\r\n case 'F': return 'Fixa';\r\n case 'V': return 'Variável';\r\n case 'I': return 'Impostos';\r\n //case 'P': return 'Operacional';\r\n case 'C': return 'Conta Corrente';\r\n case 'T': return 'Transferências';\r\n case 'A': return 'Aplicação';\r\n case 'U': return 'Outros';\r\n default: return '';\r\n }\r\n }\r\n\r\n translateClassificacaoInverso(classificacao: string) {\r\n switch (classificacao) {\r\n case 'Outras':\r\n case 'OUTRAS': return 'S';\r\n case 'Operacional':\r\n case 'OPERACIONAL': return 'O';\r\n case 'Fixa':\r\n case 'FIXA': return 'F';\r\n case 'Variável':\r\n case 'VARIÁVEL':\r\n case 'VARIAVEL': return 'V';\r\n case 'Impostos':\r\n case 'IMPOSTOS': return 'I';\r\n // case 'Operacional':\r\n // case 'OPERACIONAL': return 'P';\r\n case 'Conta Corrente':\r\n case 'CONTA CORRENTE': return 'C';\r\n case 'Transferências':\r\n case 'TRANSFERÊNCIAS':\r\n case 'TRANSFERENCIAS': return 'T';\r\n case 'Aplicação':\r\n case 'APLICAÇÃO':\r\n case 'APLICACAO': return 'A';\r\n case 'Outros':\r\n case 'OUTROS': return 'U';\r\n default: return '';\r\n }\r\n }\r\n\r\n getImgComplemento(): string {\r\n let data = new Date();\r\n return `${data.getDate()}${data.getHours()}${data.getMilliseconds()}`;\r\n }\r\n\r\n compareDatas(data: Date, comparaData?: Date): boolean {\r\n if (!comparaData)\r\n comparaData = new Date();\r\n return data >= comparaData;\r\n }\r\n\r\n //erros\r\n extractErrorCode = (error: Response | any): number => {\r\n let erroCode: number;\r\n if (error instanceof Response) {\r\n const body = (error.json() || '') as any;\r\n const err = body['error'] || JSON.stringify(body)\r\n erroCode = error.status;\r\n } else {\r\n erroCode = error.status;\r\n }\r\n console.log('LogD erro service Code ', erroCode);\r\n return erroCode;\r\n }\r\n\r\n extractError = (error: Response | any): Promise<string> => {\r\n let erroMsg: string;\r\n if (error instanceof Response) {\r\n const body = (error.json() || '') as any;\r\n const err = body['error'] || JSON.stringify(body)\r\n erroMsg = `${error.status} - ${error.statusText || ''} ${err}`;\r\n //erroMsg = 'Erro response'; //error.error['message'] != null ? error.error['message'] : error.error\r\n } else {\r\n if (error.error instanceof Blob) {\r\n return (error.error as Blob).text();\r\n }\r\n erroMsg = error.error['message'] != null ? error.error['message'] : error.error; //error.message ? error.message : error.toString();\r\n }\r\n console.log('LogD erro service ', erroMsg);\r\n return new Promise((resolve, reject) => {\r\n resolve(erroMsg);\r\n })\r\n }\r\n\r\n handleObservableError(error: Response | any): Promise<string> {\r\n let code = this.extractErrorCode(error);\r\n console.log('error code', code);\r\n if (code == 401 || code == 404 || code == 0 || code == 502 || code == 503) {\r\n return new Promise((resolve, reject) => {\r\n if (code == 401) {\r\n\r\n\r\n /*\r\n if (this.authServiceBase) {\r\n this.authServiceBase.logout(true);\r\n }\r\n */\r\n\r\n /*\r\n if (this.routerBase) {\r\n this.routerBase.navigateByUrl('login');\r\n }\r\n */\r\n resolve('Acesso não autorizado. Faça login novamente.');\r\n } else if (code == 404) {\r\n resolve('Serviço não encontrado.');\r\n } else if (code == 0 || code == 502 || code == 503) {\r\n resolve('Não foi possivel conectar com o servidor');\r\n }\r\n })\r\n }\r\n else {\r\n return this.extractError(error);\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n//import { AlertController, LoadingController, ModalController, ToastController } from '@ionic/angular/standalone';\n//import { PesquisaResultado } from '../page/pesquisa-resultado/pesquisa-resultado';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilsService {\n constructor(\n // private alertCtrl: AlertController,\n // private loadingCtrl: LoadingController,\n // private modalCtrl: ModalController,\n // private toastCtrl: ToastController,\n ) { }\n\n //caixas de dialogo\n /*\n async showLoading(msg: string, cancelable: boolean = false): Promise<HTMLIonLoadingElement> {\n const loading = await this.loadingCtrl.create({\n message: msg,\n backdropDismiss: cancelable\n //duration: 2000\n });\n \n await loading.present();\n return loading;\n\n }\n */\n\n /*\n async showToast(msg: string) {\n const toast = await this.toastCtrl.create({\n message: msg,\n duration: 3000\n });\n await toast.present();\n }\n */\n\n /*\n async showAlert(msg: string, title?: string): Promise<HTMLIonAlertElement> {\n const alert = await this.alertCtrl.create({\n header: title,\n //subHeader: 'Subtitle',\n message: msg,\n buttons: ['OK']\n });\n\n await alert.present();\n\n return alert;\n }\n */\n\n /*\n async showConfirm(titulo: string, msg: string, ok: string, cancel: string, okAction: any, cancelAction: any = null) {\n const confirm = await this.alertCtrl.create({\n header: titulo,\n message: msg,\n buttons: [\n {\n text: ok,\n handler: () => {\n if (okAction != null)\n okAction();\n }\n },\n {\n text: cancel,\n handler: () => {\n if (cancelAction)\n cancelAction();\n }\n }\n ]\n });\n await confirm.present();\n }\n */\n\n /*\n async showConfirmPromise(titulo: string, msg: string, ok: string = 'Sim', cancel: string = 'Não'): Promise<boolean> {\n\n return new Promise(async (resolve, reject) => {\n const confirm = await this.alertCtrl.create({\n header: titulo,\n message: msg,\n buttons: [\n {\n text: ok,\n handler: () => resolve(true)\n },\n {\n text: cancel,\n handler: () => resolve(false)\n }\n ]\n });\n await confirm.present();\n }\n )\n }\n */\n\n\n /*\n async pesquisarModal(urlPesquisa: string, campos: any, callback: Function, listaPesquisa: any = null, funcaoPesquisa: Function | null = null) {\n const modal = await this.modalCtrl.create(\n {\n component: PesquisaResultado,\n componentProps: {\n url: urlPesquisa,\n filtro: campos.filtro,\n campoId: campos.campoId,\n campos: campos.campos,\n listaOrigem: listaPesquisa,\n funcaoPesquisa: funcaoPesquisa\n //campo1: campos.campo1,\n //campo2: campos.campo2,\n //campo1Label: campos.campo1Label,\n //campo2Label: campos.campo2Label\n },\n cssClass: 'my-custom-modal-pesquisa',\n }\n )\n \n modal.onDidDismiss().then(data => {\n let result = data['data'];\n if (result) {\n callback(result);\n }\n })\n //exibir a tela\n modal.present(); \n }\n */\n\n //forms\n setFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\n Object.keys(entity).forEach(name => {\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\n return;\n }\n if (form.controls[name]) {\n form.controls[name].patchValue(entity[name], { onlySelf: true, emitEvent: false });\n form.get(name)?.markAsPristine();\n form.get(name)?.markAsUntouched();\n //console.log(name, form.get(name).dirty)// \n }\n });\n }\n\n getFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\n console.log(form, ' = ', entity);\n Object.keys(entity).forEach(name => {\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\n return;\n }\n //console.log(name, form.controls[name], form.controls[name]?.value);\n if (form.controls[name]) {\n entity[name as keyof typeof entity] = form.controls[name].value; \n if (entity[name] === \"\") {\n entity[name] = null;\n }\n }\n });\n console.log('getFormValues', entity);\n }\n\n /*\n //formatação de campos\n static decimalToStringMil(number?: any) {\n if (number != null) {\n if (number == 0 || number == '0') {\n return '0,00';\n }\n //console.log(number);\n let numero = number.toFixed(2).split('.');\n numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.');\n return numero.join(',').replace('-.', '-');\n } else\n return '';\n }\n\n static strToFloatZeroPontuacao(str: any): number {\n if (Number.isFinite(str))\n return str;\n if (this.isEmpty(str))\n return 0;\n else {\n //a string tem 2 casas decimais\n let semPontos = str.replace('.', '').replace(',', '');\n return this.round((parseInt(semPontos) / 100), 2);\n }\n }\n\n \n static isEmpty(str: string | any): boolean {\n return str == null || str == '';\n }\n\n static round(value: number, decimals: number): number {\n return Number(Math.round(Number(value + 'e' + decimals)) + 'e-' + decimals);\n }\n */\n}\n","//import { BaseModel } from \"../model/base-model\";\n\nimport { Observable } from \"rxjs\";\nimport { BaseModel } from \"../../lib/model/base-model\";\n\nexport interface IBaseEntity<T extends BaseModel> {\n getEntidade(id: any): Observable<T>;\n getLista(params: any[]): Observable<T[]>;\n setEntidade(entidade: T): Observable<T>;\n updateEntidade(entidade: T): Observable<T>;\n deleteEntidade(id: any, entidade?: T): Observable<any>;\n setInativarEntidade(id: any): Observable<T>\n}\n","import { InjectionToken } from '@angular/core';\r\nimport { LibConfig } from './lib-config';\r\n\r\nexport const LibConfigService = new InjectionToken<LibConfig>('LibConfig');","import { Inject, Injectable, Service } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { LibConfig } from './lib-config';\r\nimport { LibConfigService } from './lib-config.token'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DataService {\r\n BASE_API: string;\r\n\r\n constructor(@Inject(LibConfigService) private config: LibConfig,\r\n private httpClient: HttpClient) { \r\n this.BASE_API = this.config.apiUrl;\r\n }\r\n\r\n /**\r\n * Obter uma lista de objetos\r\n * @param url Url parcial para fazer a requisição. ex /categoria\r\n * @returns \r\n */\r\n getLista<T>(url: string): Observable<T[]> {\r\n url = `${this.BASE_API}${url}`\r\n return this.httpClient.get<T[]>(url);\r\n }\r\n\r\n /**\r\n * Obter uma lista de objetos com paginação\r\n * @param url Url parcial para fazer a requisição. ex. /categoria\r\n * @param page Número da página\r\n * @param offset Número de registros por página\r\n * @param totalRec Total de registros\r\n * @returns Array dos objetos encontrados\r\n */\r\n getListaPage<T>(url: string, page: number, offset: number, totalRec: number): Observable<T> {\r\n url = `${this.BASE_API}${url}${url.indexOf('?') > -1 ? '&' : '?'}page=${page}&offset=${offset}&totalRec=${totalRec ? totalRec : ''}`;\r\n console.log('getListaPage', url);\r\n return this.httpClient.get<T>(url);\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo POST para salvar novo registro\r\n * Foi criado T e U porque tem caso que o tipo da request é diferente do tipo da response\r\n * @param url Url parcial para fazer a requisição\r\n * @param param Objeto para ser serializado\r\n * @returns Ok, Objeto com id gerado\r\n */\r\n postRequest<T, U>(url: string, param: U): Observable<T> {\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Content-Type', 'application/json; charset=utf-8');\r\n\r\n return this.httpClient.post<T>(`${this.BASE_API}/${url}`, param, { headers: headers });\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo POST para salvar novo registro\r\n * Foi criado T e U porque tem caso que o tipo da request é diferente do tipo da response\r\n * @param url Url parcial para fazer a requisição\r\n * @param param Objeto do tipo FormData\r\n * @returns Ok, Objeto com id gerado\r\n */\r\n postFormRequest<T>(url: string, param: FormData): Observable<T> { \r\n return this.httpClient.post<T>(`${this.BASE_API}/${url}`, param);\r\n } \r\n\r\n /**\r\n * Fazer requisição do tipo POST, esperando uma lista como response\r\n * Foi criado T e U porque tem caso que o tipo da request é diferente do tipo da response\r\n * @param url Url parcial para fazer a requisição\r\n * @param param Objeto para ser serializado\r\n * @returns Ok, Lista de objetos\r\n */\r\n postListRequest<T, U>(url: string, param: U): Observable<T[]> {\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Content-Type', 'application/json; charset=utf-8');\r\n return this.httpClient.post<T[]>(`${this.BASE_API}/${url}`, param, { headers: headers });\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo PUT para salvar um registro alterado\r\n * Foi criado T e U porque tem caso que o tipo da request é diferente do tipo da response\r\n * @param url Url parcial para fazer a requisição\r\n * @param param Objeto para ser serializado\r\n * @returns Ok, Objeto atualizado\r\n */\r\n putRequest<T, U>(url: string, param: U): Observable<T> {\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Content-Type', 'application/json; charset=utf-8');\r\n\r\n return this.httpClient.put<T>(`${this.BASE_API}/${url}`, param, { headers: headers });\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo PUT para salvar um registro alterado\r\n * Foi criado T e U porque tem caso que o tipo da request é diferente do tipo da response\r\n * @param url Url parcial para fazer a requisição\r\n * @param param Objeto do tipo FormData\r\n * @returns Ok, Objeto com id gerado\r\n */\r\n putFormRequest<T>(url: string, param: FormData): Observable<T> { \r\n return this.httpClient.put<T>(`${this.BASE_API}/${url}`, param);\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo GET para retornar uma lista de objetos\r\n * @param url url parcial para fazer a requisição\r\n * @returns Ok, lista encontrada\r\n */\r\n getListRequest<T>(url: string): Observable<T[]> {\r\n return this.httpClient.get<T[]>(`${this.BASE_API}/${url}`);\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo GET para um objeto\r\n * @param url url parcial para fazer a requisição\r\n * @returns Ok, objeto encontrado\r\n */\r\n getRequest<T>(url: string): Observable<T> {\r\n console.log(`${this.BASE_API}/${url}`);\r\n return this.httpClient.get<T>(`${this.BASE_API}/${url}`);\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo DELETE para excluir um registro permanentemente\r\n * @param url url parcial para fazer a requisição\r\n * @param param objeto opcional para geração de logs\r\n * @returns Ok, Error com mensagem\r\n */\r\n deleteRequest(url: string, param?: any) {\r\n if (param) {\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Content-Type', 'application/json; charset=utf-8');\r\n return this.httpClient.delete(`${this.BASE_API}/${url}`, { body: param, headers: headers });\r\n } else {\r\n return this.httpClient.delete(`${this.BASE_API}/${url}`);\r\n }\r\n }\r\n}\r\n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nconst extractErrorCode = async (error: Response | any): Promise<number> => {\n let erroCode: number;\n if (error instanceof Response) {\n const body = await error.json() || '';\n const err = body['error'] || JSON.stringify(body)\n erroCode = error.status;\n } else {\n erroCode = error.status;\n }\n console.log('LogD erro service Code ', erroCode);\n \n return erroCode;\n \n }\n \n const extractError = async (error: Response | any): Promise<string> => {\n let erroMsg: string;\n if (error instanceof Response) {\n const body = await error.json() || '';\n const err = body['error'] || JSON.stringify(body)\n erroMsg = `${error.status} - ${error.statusText || ''} ${err}`;\n //erroMsg = 'Erro response'; //error.error['message'] != null ? error.error['message'] : error.error\n } else {\n erroMsg = error.error['message'] != null ? error.error['message'] : error.error; //error.message ? error.message : error.toString();\n }\n console.log('LogD erro service ', erroMsg);\n \n return erroMsg;\n \n }\n\n@Component({\n template: ''\n }) \nexport abstract class BasePage implements OnInit {\n routerBase?: Router;\n constructor(router?: Router) {\n this.routerBase = router; // ?? null;\n \n console.log('onInit Base Service');\n \n }\n \n ngOnInit() { \n console.log('Base page');\n }\n \n protected handlePromiseError(error: Response | any): Promise<any> {\n return Promise.reject(extractError(error));\n }\n \n /*\n protected handleObservableError(error: Response | any): Observable<any> {\n return Observable.throw(extractError(error));\n }\n */\n protected async handleObservableError(error: Response | any): Promise<string> {\n let code = await extractErrorCode(error);\n if (code == 401) {\n \n /*\n if (this.authServiceBase) {\n this.authServiceBase.logout(true);\n }\n */ \n \n /*\n if (this.routerBase) {\n this.routerBase.navigateByUrl('login');\n }\n */\n return 'Acesso não autorizado. Faça login novamente.';\n } else {\n return extractError(error);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { EventoCadastro } from '../../lib/model/evento-cadastro';\nimport { EventoFoco } from '../../lib/model/evento-foco';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CadastroService {\n alteracaoFilho: BehaviorSubject<EventoCadastro> = new BehaviorSubject<EventoCadastro>({ Cadastro: 'Cadastro', Id: 0 });\n carregarRegistro: BehaviorSubject<EventoCadastro> = new BehaviorSubject<EventoCadastro>({ Cadastro: 'Cadastro', Id: 0 });\n novoMaster: BehaviorSubject<EventoCadastro> = new BehaviorSubject({ Cadastro: 'Cadastro', Id: 0 });\n novoRegistro: BehaviorSubject<EventoCadastro> = new BehaviorSubject({ Cadastro: 'Cadastro', Id: 0 });\n focoCampo: BehaviorSubject<EventoFoco> = new BehaviorSubject({ Campo: 'input' });\n \n}\n","\r\nimport { Component, EventEmitter, Inject, Input, OnInit, Output, OnDestroy } from \"@angular/core\";\r\nimport { FormControl, FormGroup, UntypedFormGroup, ValidationErrors } from \"@angular/forms\";\r\nimport { ActivatedRoute, Router } from \"@angular/router\";\r\n// import { BaseModel } from \"../model/base-model\";\r\n// import { PesquisaCampo } from \"../model/pesquisa-campo\";\r\nimport { IBaseEntity } from \"../services/base-entity\";\r\n//import { UtilsService } from \"../services/utils.service\";\r\nimport { BasePage } from \"./base-page\";\r\nimport { CadastroService } from \"../services/cadastro.service\";\r\nimport { filter, Subscription } from \"rxjs\";\r\nimport { IBaseAlerts } from \"../services/base-alerts\";\r\nimport { BaseModel } from \"../../lib/model/base-model\";\r\nimport { PesquisaCampo } from \"../../lib/model/pesquisa-campo\";\r\nimport { HtmlRow } from \"../../lib/model/html-row\";\r\nimport { HtmlCampo } from \"../../lib/model/html-campo\";\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport class BaseCadastro<T extends BaseModel> extends BasePage implements OnInit, OnDestroy {\r\n override routerBase?: Router;\r\n protected alertsBase!: IBaseAlerts;\r\n //dataService: DataService;\r\n activatedRouteBase?: ActivatedRoute;\r\n entidade?: T;\r\n entidadeForm: FormGroup<any>;\r\n selectedEntidade: T | null;\r\n validation_messages: any = {};\r\n salvando: boolean = false;\r\n cadastroServiceBase?: CadastroService;\r\n novoAfterDelete: boolean = true;\r\n /**\r\n * Exibir alert com erros de validação\r\n */\r\n mostrarValidacao: boolean = false;\r\n\r\n //emiter para teste\r\n @Output() entidadePosted = new EventEmitter<T>();\r\n\r\n //construtor\r\n creator!: new () => T;\r\n //custom functions\r\n // protected getEntidadeFunction: Function;\r\n // protected setEntidadeFunction: Function;\r\n // protected updateEntidadeFunction: Function;\r\n // protected deleteEntidadeFunction: Function;\r\n protected entidadeService!: IBaseEntity<T>\r\n //type: any;\r\n //pesquisa modal\r\n public filtro?: string;\r\n protected pesquisaUrl?: string;\r\n protected pesquisaCampoId?: string;\r\n protected pesquisaCampos?: PesquisaCampo[];\r\n\r\n //html form\r\n htmlForm: HtmlRow[] = [];\r\n\r\n //para grid\r\n temLista: boolean = false;\r\n @Input() itensLista: T[] = [];\r\n @Input() masterId!: number;\r\n @Output() atualizarItensEvent = new EventEmitter();\r\n atualizarItens: boolean = false;\r\n\r\n novoMasterSubscriptioName: string = \"Cadastro\";\r\n novoMasterSubscribe: Subscription | null = null;\r\n\r\n constructor(@Inject('type') private type: any,\r\n private activatedRouteI?: ActivatedRoute,\r\n //dataService?: DataService,\r\n router?: Router,\r\n cadastroService?: CadastroService\r\n ) {\r\n super(router);\r\n this.routerBase = router;\r\n this.activatedRouteBase = activatedRouteI;\r\n this.cadastroServiceBase = cadastroService;\r\n //construir o form\r\n this.selectedEntidade = new this.type();\r\n if (this.selectedEntidade != null) {\r\n this.entidadeForm = this.selectedEntidade.getForm();\r\n this.validation_messages = this.selectedEntidade.getValidationMessages();\r\n } else {\r\n let Id = new FormControl('');\r\n this.entidadeForm = new FormGroup({ Id });\r\n }\r\n\r\n //this.getHtmlForm();\r\n }\r\n\r\n getHtmlForm() {\r\n //construir o form html\r\n if (this.selectedEntidade != null) {\r\n this.htmlForm = this.selectedEntidade.getHtmlForm();\r\n }\r\n }\r\n\r\n customFields() {\r\n\r\n }\r\n\r\n customValidators() {\r\n\r\n }\r\n\r\n /**\r\n * Setar propiedades de lookup, pesquisa, pra não ficar amarrado ao model\r\n */\r\n customHtmlProps() {\r\n\r\n }\r\n\r\n getHtmlField(campo: string): HtmlCampo | null {\r\n //return this.htmlForm.find(f => f.Nome === campo);\r\n for (let row of this.htmlForm) {\r\n const result = row.Linha.find(f => f.Nome === campo);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async customInitValues() {\r\n\r\n }\r\n\r\n afterInitEmpresa() {\r\n\r\n }\r\n\r\n afterPreencherForm() {\r\n\r\n }\r\n\r\n afterCriarRegistro() {\r\n this.entidadeForm.patchValue({ Id: this.selectedEntidade?.Id ?? 0 });\r\n //setar o cmpo id do form com o id do objeto\r\n if (this.entidadeForm.controls[this.type.CampoId]) {\r\n this.entidadeForm.controls[this.type.CampoId].patchValue(this.selectedEntidade?.Id ?? 0);\r\n //console.log('campoid', this.type.CampoId, this.selectedEntidade.Id);\r\n }\r\n //console.log('afterCriarRegistro', this.entidadeForm.value);\r\n if (this.temLista) {\r\n this.atualizarItens = true;\r\n this.carregarItens();\r\n }\r\n }\r\n\r\n afterAtualizarRegistro() {\r\n if (this.temLista) {\r\n this.atualizarItens = true;\r\n this.carregarItens();\r\n }\r\n }\r\n\r\n afterDeleteRegistro() {\r\n if (this.temLista) {\r\n this.atualizarItens = true;\r\n this.carregarItens();\r\n this.selectedEntidade = null;\r\n }\r\n }\r\n\r\n afterPesquisaEntidade() {\r\n\r\n }\r\n\r\n async validarRegistro(): Promise<boolean> {\r\n if (this.mostrarValidacao) {\r\n if (!this.entidadeForm.valid) {\r\n const mensagens = this.getFormValidationErrors(this.entidadeForm, this.validation_messages);\r\n const valid = await this.alertsBase.showConfirmPromise('Erro...', `Por favor, verifique o formulário.<br>${mensagens.join('<br>')}`, 'Continuar', 'Cancelar');\r\n return valid;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n override ngOnInit() {\r\n\r\n super.ngOnInit();\r\n\r\n this.getHtmlForm();\r\n\r\n console.log('basecadastro oninit')\r\n\r\n //query params para ID da empresa contabilidade\r\n if (this.activatedRouteBase) {\r\n this.activatedRouteBase.queryParams.subscribe(params => {\r\n console.log('params:', params);\r\n if (params) {\r\n this.processarRouteParams(params);\r\n this.afterRouteParams();\r\n }\r\n });\r\n }\r\n\r\n this.customFields();\r\n\r\n this.customValidators();\r\n\r\n this.customHtmlProps();\r\n\r\n if (this.temLista) {\r\n this.inicializarLista();\r\n }\r\n\r\n // const id = this.activatedRouteBase.snapshot.paramMap.get('id');\r\n // if (id) {\r\n // this.getEntidade(parseInt(id));\r\n // } else {\r\n // this.novaEntidade();\r\n // }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.novoMasterSubscribe != null) {\r\n this.novoMasterSubscribe.unsubscribe();\r\n }\r\n //console.log('on destroy');\r\n if (this.atualizarItens) {\r\n this.atualizarItensEvent.emit(this.itensLista);\r\n }\r\n }\r\n\r\n inicializarLista() {\r\n if (this.cadastroServiceBase != null) {\r\n const novoMaster = this.cadastroServiceBase.novoMaster.pipe(\r\n filter(val => val.Cadastro == this.novoMasterSubscriptioName),\r\n //take(1), \r\n );\r\n\r\n\r\n this.novoMasterSubscribe = novoMaster.subscribe((result) => {\r\n console.log(\"novo subscribe\", result);\r\n this.selectedEntidade = null;\r\n });\r\n }\r\n //this.carregaItens();\r\n //iniciar com form fechado\r\n this.selectedEntidade = null;\r\n }\r\n\r\n carregarItens(novo: boolean = false) {\r\n this.entidadeService.getLista([this.masterId])\r\n .subscribe({\r\n next: (itens) => {\r\n this.itensLista = itens;\r\n if (novo) {\r\n this.novaEntidade();\r\n }\r\n }\r\n })\r\n }\r\n\r\n selecionarItemLista(item: T) {\r\n this.selectedEntidade = new this.type();\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.getFromJson(item);\r\n this.selectedEntidade.Id = item[this.type.CampoId as keyof typeof this.selectedEntidade] as number;\r\n }\r\n\r\n console.log(\"selected Entidade lista\", this.selectedEntidade);\r\n\r\n this.preencherForm();\r\n }\r\n\r\n async deleteItemLista(item: T, mensagem: string) {\r\n // this.selectedEntidade = cnae;\r\n // this.selectedEntidade.Id = cnae.EmpresaCnaeId;\r\n await this.deleteRegistro(mensagem, item);\r\n }\r\n\r\n\r\n // async showPesquisarModal() {\r\n\r\n // }\r\n\r\n async pesquisar(filtro?: string) {\r\n this.filtro = filtro ?? this.filtro;\r\n //const url = `/categorias?empresaId=${this.empresaSelecionadaId}&filtro=<FILTRO>`;\r\n //console.log('campoId: ', this.pesquisaCampoId ?? this.type.CampoId);\r\n\r\n //await this.showPesquisarModal();\r\n\r\n if (this.alertsBase) {\r\n\r\n this.alertsBase.pesquisarModal(this.pesquisaUrl ?? '',\r\n {\r\n filtro: this.filtro,\r\n campoId: this.pesquisaCampoId ?? this.type.CampoId,\r\n campos: this.pesquisaCampos ?? this.type.PesquisaCampos\r\n }, (result: any) => {\r\n this.getEntidade(result.Id, true);\r\n }, null, null);\r\n }\r\n\r\n }\r\n\r\n preencherForm() {\r\n if (!this.selectedEntidade) {\r\n return;\r\n }\r\n //setar o valor dos campos formatted\r\n if (this.selectedEntidade.setCamposFormatados) {\r\n this.selectedEntidade.setCamposFormatados();\r\n }\r\n console.log('preencher form', this.entidadeForm.value);\r\n this.setFormValues(this.entidadeForm, this.selectedEntidade);\r\n console.log('preencher form after', this.entidadeForm.value);\r\n this.afterPreencherForm();\r\n }\r\n\r\n async getEntidade(id: number, afterPesquisa = false) {\r\n //console.log('get entidade')\r\n let loading = await this.alertsBase.showLoading('Pesquisando...', false);\r\n //this.getEntidadeFunction(id)\r\n this.entidadeService.getEntidade(id)\r\n .subscribe({\r\n next: (result) => {\r\n console.log('get Entidade', result);\r\n loading.dismiss();\r\n //this.selectedEntidade = result;\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.getFromJson(result);\r\n this.selectedEntidade.Id = id;\r\n }\r\n console.log('get Entidade', this.selectedEntidade);\r\n this.preencherForm();\r\n if (afterPesquisa) {\r\n this.afterPesquisaEntidade();\r\n }\r\n }, error: (error) => {\r\n loading.dismiss();\r\n this.handleObservableError(error).then(msg => this.alertsBase.showAlert(msg, 'Aconteceu um erro...'));\r\n }\r\n })\r\n }\r\n\r\n afterNovaEntidade() {\r\n\r\n }\r\n\r\n async novaEntidade() {\r\n console.log('nova entidade');\r\n this.selectedEntidade = new this.type();\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.Id = 0;\r\n }\r\n //console.log(this.selectedEntidade);\r\n await this.customInitValues();\r\n this.preencherForm();\r\n this.afterNovaEntidade();\r\n }\r\n\r\n beforeSalvarEntidade() { }\r\n\r\n async salvarEntidade() {\r\n if (!this.validarRegistro()) {\r\n return;\r\n }\r\n this.beforeSalvarEntidade();\r\n if (this.selectedEntidade != null && this.selectedEntidade.Id == 0) {\r\n this.criarRegistro();\r\n }\r\n else {\r\n this.atualizarRegistro();\r\n }\r\n }\r\n\r\n beforeCriarRegistro() {\r\n if (this.selectedEntidade != null) {\r\n if (this.selectedEntidade.getCamposFormatados) {\r\n this.selectedEntidade.getCamposFormatados();\r\n }\r\n }\r\n }\r\n\r\n beforeAtualizarRegistro() {\r\n if (this.selectedEntidade != null && this.selectedEntidade.getCamposFormatados) {\r\n this.selectedEntidade.getCamposFormatados();\r\n }\r\n }\r\n\r\n async criarRegistro() {\r\n if (!this.selectedEntidade)\r\n return;\r\n this.salvando = true;\r\n let loading = await this.alertsBase.showLoading('Salvando...', false);\r\n //this.setEntidadeFunction(this.entidadeForm.value)\r\n //this.selectedEntidade = this.entidadeForm.value;\r\n this.getFormValues(this.entidadeForm, this.selectedEntidade);\r\n this.beforeCriarRegistro();\r\n this.entidadeService.setEntidade(this.selectedEntidade)\r\n .subscribe({\r\n next: (result) => {\r\n loading.dismiss();\r\n //this.selectedEntidade = result;\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.getFromJson(result);\r\n this.selectedEntidade.Id = result[this.type.CampoId as keyof typeof this.selectedEntidade] as number;\r\n }\r\n //console.log(this.selectedEntidade);\r\n //não preencher form com novo registro\r\n //this.preencherForm();\r\n //preencher o id\r\n const idRegistro = this.type.CampoId;\r\n this.entidadeForm.patchValue({ [idRegistro]: this.selectedEntidade?.Id ?? 0 });\r\n console.log('id', idRegistro, 'form value', this.entidadeForm.value);\r\n this.salvando = false;\r\n this.alertsBase.showToast('Cadastrado com sucesso.')\r\n //this.navCtrl.back();\r\n //emitir o resultado\r\n this.entidadePosted.emit(result);\r\n\r\n this.afterCriarRegistro();\r\n }, error: (error) => {\r\n console.log(error);\r\n loading.dismiss();\r\n this.salvando = false;\r\n this.handleObservableError(error).then(msg => this.alertsBase.showAlert(msg));\r\n }\r\n });\r\n }\r\n\r\n\r\n async atualizarRegistro() {\r\n if (!this.selectedEntidade)\r\n return;\r\n this.salvando = true;\r\n let loading = await this.alertsBase.showLoading('Atualizando...', false);\r\n //this.updateEntidadeFunction(this.entidadeForm.value)\r\n //this.selectedEntidade = this.entidadeForm.value;\r\n //salvar o id\r\n const id = this.selectedEntidade?.Id ?? -1;\r\n this.getFormValues(this.entidadeForm, this.selectedEntidade);\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.Id = id;\r\n }\r\n this.beforeAtualizarRegistro();\r\n this.entidadeService.updateEntidade(this.selectedEntidade)\r\n .subscribe({\r\n next: (result) => {\r\n loading.dismiss();\r\n //verificar se retornou a entidade e carregar os campos.\r\n if (result && result[this.type.CampoId as keyof typeof result] != null && this.selectedEntidade != null) {\r\n this.selectedEntidade.getFromJson(result);\r\n }\r\n\r\n this.salvando = false;\r\n this.alertsBase.showToast('Atualizado com sucesso.')\r\n this.afterAtualizarRegistro()\r\n //this.navCtrl.back();\r\n }, error: (error) => {\r\n loading.dismiss();\r\n this.salvando = false;\r\n this.handleObservableError(error).then(msg => this.alertsBase.showAlert(msg));\r\n }\r\n });\r\n }\r\n\r\n\r\n deleteRegistro(mensagem?: string, entidade?: T) {\r\n let selectedId = this.selectedEntidade?.Id;\r\n if (entidade) {\r\n selectedId = entidade[this.type.CampoId as keyof typeof entidade] as number;\r\n }\r\n this.alertsBase.showConfirm('Confirmação', mensagem ?? 'Tem certeza que quer apagar esse registro?', 'Sim', 'Não',\r\n async () => {\r\n //this.deleteEntidadeFunction(this.selectedEntidade.Id)\r\n let loading = await this.alertsBase.showLoading('Excluindo...', false);\r\n this.entidadeService.deleteEntidade(selectedId, entidade)\r\n .subscribe({\r\n next: (result) => {\r\n loading.dismiss();\r\n this.alertsBase.showToast('Registro excluido com sucesso.');\r\n if (this.novoAfterDelete) {\r\n this.novaEntidade();\r\n }\r\n this.afterDeleteRegistro();\r\n }, error: (error) => {\r\n loading.dismiss();\r\n this.handleObservableError(error).then(msg => this.alertsBase.showAlert(msg));\r\n }\r\n });\r\n }, null);\r\n }\r\n\r\n async inativarRegistro(campoInativado: string = '') {\r\n if (!this.selectedEntidade)\r\n return;\r\n let valor = '';\r\n let msg = \"Confirma a inativação do registro?\";\r\n if (campoInativado) {\r\n //verificar se o campo tem valor\r\n valor = this.entidadeForm.get(campoInativado)?.value;\r\n }\r\n\r\n if (valor) {\r\n msg = \"Confirma a ativação do registro?\";\r\n }\r\n\r\n this.alertsBase.showConfirm(\"Confirmar\", msg,\r\n \"Sim\", \"Não\", async () => {\r\n let loading = await this.alertsBase.showLoading(\"Inativando o registro...\", false);\r\n this.entidadeService.setInativarEntidade(this.selectedEntidade?.Id ?? 0).subscribe({\r\n next: (result) => {\r\n //this.selectedEntidade = result;\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.getFromJson(result);\r\n //this.selectedEntidade.Id = result.Id;\r\n this.selectedEntidade.Id = result[this.type.CampoId as keyof typeof result] as number;\r\n }\r\n this.alertsBase.showToast('Registro inativado com sucesso.');\r\n this.preencherForm();\r\n loading.dismiss();\r\n }, error: error => {\r\n loading.dismiss();\r\n this.handleObservableError(error).then(msg => this.alertsBase.showAlert(msg));\r\n }\r\n })\r\n }, null);\r\n }\r\n\r\n cancelar(novaEntidade: boolean = true) {\r\n if (this.selectedEntidade != null && this.selectedEntidade.Id != 0) {\r\n this.getEntidade(this.selectedEntidade.Id ?? 0);\r\n } else {\r\n if (novaEntidade) {\r\n this.novaEntidade();\r\n }\r\n }\r\n }\r\n\r\n processarRouteParams(params: any) {\r\n\r\n }\r\n\r\n afterRouteParams() {\r\n\r\n }\r\n\r\n //helpers para valores do form\r\n setFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\r\n Object.keys(entity).forEach(name => {\r\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\r\n return;\r\n }\r\n console.log('set form values', name, form.controls[name]);\r\n if (form.controls[name]) {\r\n //form.controls[name].patchValue(entity[name], { onlySelf: true, emitEvent: false });\r\n form.controls[name].patchValue(entity[name]);\r\n form.get(name)?.markAsPristine();\r\n form.get(name)?.markAsUntouched();\r\n //console.log(name, form.get(name).dirty)// \r\n }\r\n });\r\n }\r\n\r\n getFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\r\n console.log(form, ' = ', entity);\r\n Object.keys(entity).forEach(name => {\r\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\r\n return;\r\n }\r\n //console.log(name, form.controls[name], form.controls[name]?.value);\r\n if (form.controls[name]) {\r\n entity[name as keyof typeof entity] = form.controls[name].value;\r\n if (entity[name] === \"\") {\r\n entity[name] = null;\r\n }\r\n }\r\n });\r\n console.log('getFormValues', entity);\r\n }\r\n\r\n getFormValidationErrors(form: FormGroup, messages: any): string[] {\r\n let result: string[] = [];\r\n Object.keys(form.controls).forEach(key => {\r\n\r\n const controlErrors = form.get(key)?.errors;\r\n if (controlErrors != null) {\r\n Object.keys(controlErrors).forEach(keyError => {\r\n //console.log('Key control: ' + key + ', keyError: ' + keyError + ', err value: ', controlErrors[keyError]);\r\n if (messages[key]) {\r\n messages[key].forEach((msg: any) => {\r\n if (msg['type'] == keyError) {\r\n console.log(msg['message']);\r\n result.push(msg['message']);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n return result;\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { FormGroup } from \"@angular/forms\";\r\n\r\n/**\r\n * Classe base para componentes de input\r\n */\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseInputComponent implements OnInit {\r\n /** Label para exibição do campo */\r\n @Input() label: string | undefined; // = 'Campo';\r\n @Input() tabindex: number = 0;\r\n /** Posição do label default, fixed, stacked, floating */\r\n @Input() labelPosition: 'default' | 'fixed' | 'stacked' | 'floating' = 'stacked';\r\n /** Nome da classe para usar na validação */\r\n @Input() validationClass: string = '';\r\n /** Tempo de resposta do input */\r\n @Input() debounce: number = 0;\r\n //@Input() nome: string = 'Campo';\r\n /** Texto exibido como placeholder ou ajuda */\r\n @Input() placeholder: string = '';\r\n /** Referência ao form que contém o input (reactive forms) */\r\n @Input() form!: FormGroup;\r\n /** Nome do campo do form (reactive forms) */\r\n @Input() campo: string = 'Campo';\r\n /** Nome do campo do form (reactive forms) */\r\n @Input('formControlName') formControlName: string = 'Campo';\r\n /** Tamanho máximo do input */\r\n @Input() max: string = '50';\r\n /** Array com messages de validação para exibir em tela */\r\n @Input() validation_messages: any[] = [];\r\n /** Tipo do input: text, date, number */\r\n @Input() type: string = \"text\";\r\n /** Flag de somente leitura */\r\n @Input() readonly: boolean = false;\r\n //@Input() leitura: boolean = false;\r\n /** Nome da classe do item container: padding, no-padding, no-padding-end, no-padding-start */\r\n @Input() itemClass: string = \"padding\";\r\n /** Evento blur */\r\n @Output() blur = new EventEmitter();\r\n /** Flag para exibir o botão de limpar campo */\r\n @Input() botaoLimpar: boolean = false;\r\n /** Cor default do label */\r\n @Input() labelColor: string = 'dark';\r\n /** Cor default do background */\r\n @Input() inputBackgroungColor: string = 'auto';\r\n /** Flag para sinalizar o campo como obrigatório na tela */\r\n @Input() showObrigatorio: boolean = true;\r\n /** Tamanho da fonte */\r\n @Input() fontSize: string = '16px';\r\n /** Ícone do input que vai exibir no início */\r\n @Input() icon: string = '';\r\n /** Src do arquivo ícone do input que vai exibir no início */\r\n @Input() iconSrc: string = '';\r\n /** Tipo de preenchimento outline = com borda; solid = cor solida */\r\n @Input() fill: 'solid' | 'outline' = 'outline';\r\n /** Modo do estilo: md, ios */\r\n @Input() mode: 'md' | 'ios' = 'md';\r\n /** Flag para estilo clássico */\r\n @Input() classic: boolean = false;\r\n /** Flag de campo obrigatório */\r\n Obrigatorio: boolean = false;\r\n /** Argumentos para o evento blur */\r\n @Input() blurArgs: any[] = [];\r\n /** Flag para exibir o botão de copiar valor */\r\n @Input() showSeeCopy: boolean = false;\r\n @Input() focusField: boolean = false; \r\n @Input() campoFoco: string = \"\";\r\n @Input() shape: string | undefined;\r\n constructor() {\r\n\r\n }\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n /** Determina se o campo tem a regra de validação required */\r\n getObrigatorio() {\r\n if (this.validation_messages) {\r\n this.Obrigatorio = this.validation_messages.find(m => m.type == 'required');\r\n }\r\n }\r\n}","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, Renderer2, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonLabel, IonInput, IonIcon, IonButton } from \"@ionic/angular\";\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'kb-input-text',\r\n templateUrl: './input-text.html',\r\n styleUrls: ['./input-text.scss', './../baseInputComponent.scss'],\r\n imports: [IonButton, IonIcon, IonItem, IonLabel, IonInput, NgClass, FormsModule],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputTextComponent,\r\n multi: true,\r\n },\r\n ],\r\n\r\n})\r\nexport class InputTextComponent extends BaseInputComponent\r\n implements OnInit, ControlValueAccessor, OnDestroy {\r\n\r\n @Input() showSeePassword: boolean = false;\r\n\r\n @Output() inputChange = new EventEmitter();\r\n\r\n //control value acessor\r\n public data!: string;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n @ViewChild(\"itemInput\", { read: ElementRef }) itemInput: any;\r\n\r\n constructor(private renderer: Renderer2) {\r\n super();\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n }\r\n\r\n writeValue(value: string | any, type?: string): void {\r\n //Converte o valor corretamente de acordo com o tipo de input\r\n console.log('write value', value);\r\n let valueEval = value;\r\n if (type == \"number\") {\r\n if (Number(value) === 0) {\r\n //this.onChange(null);\r\n valueEval = null;\r\n } else {\r\n //this.onChange(Number(value));\r\n valueEval = Number(value);\r\n }\r\n } else if (type == \"date\") {\r\n //null se for \"\"\r\n if (value === \"\") {\r\n //this.onChange(null);\r\n valueEval = null;\r\n } else {\r\n //this.onChange(value);\r\n }\r\n } else {\r\n //this.onChange(value);\r\n } \r\n this.onChange(valueEval);\r\n this.data = valueEval;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n\r\n }\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n this.inputChange.emit(valor);\r\n }\r\n //para cores focus\r\n onBlur() {\r\n //console.log('input select blur')\r\n //document.getElementById(\"item-select\").classList.remove(\"item-has-focus\");\r\n\r\n if (this.classic) {\r\n setTimeout(() => {\r\n this.renderer.removeClass(this.itemInput.nativeElement, \"item-has-focus\");\r\n }, 200);\r\n }\r\n\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n }\r\n\r\n entered() {\r\n //adicionar classe ao ion-item, não funcionou\r\n console.log('input focused');\r\n if (this.classic) {\r\n setTimeout(() => {\r\n this.renderer.addClass(this.itemInput.nativeElement, \"item-has-focus\");\r\n }, 100);\r\n }\r\n\r\n }\r\n //ações dos botões\r\n changeTypeOfInput() {\r\n this.type = this.type == \"password\" ? \"text\" : \"password\";\r\n console.log('type:', this.type);\r\n }\r\n\r\n copiarClick() {\r\n // console.log(this.inputTextEdit.nativeElement);\r\n // console.log(this.inputTextEdit);\r\n let texto = this.data;\r\n if (this.type == 'date') {\r\n //texto = this.utils.converterDataHora(texto, false, false);\r\n }\r\n navigator.clipboard.writeText(texto);\r\n //this.utils.showToast('Copiado')\r\n }\r\n}\r\n","<!-- \n se label position = floating colocar padding = 12px \n \n -->\n<div [class]=\"{ 'input-text-padding': !classic }\">\n <!-- [label]=\"label\"\n [labelPlacement]=\"labelPosition\" -->\n @if(classic) {\n <ion-item #itemInput lines=\"none\"\n style=\" --background: inherited; --background-focused: transparent; padding-right: 0px;\"\n [class]=\"itemClass + ' classic'\"\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\n\n <!--\n <ion-label class=\"label-focus\" [position]=\"labelPosition\">{{ label }}</ion-label>\n -->\n @if (label) {\n <ion-label style=\"color: var(--input-label-color);\" position=\"{{ labelPosition }}\">{{ label }}</ion-label>\n }\n\n <!-- \n <ion-icon slot=\"start\" name=\"lock-closed\" aria-hidden=\"true\"></ion-icon>\n -->\n\n <ion-input #inputText [type]=\"type\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" \n (input)=\"writeValue(inputText.value, type)\" [value]=\"data\" (ionBlur)=\"onBlur()\" (ionFocus)=\"entered()\">\n </ion-input>\n\n\n @if (showSeePassword) {\n\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\n (click)=\"changeTypeOfInput()\">\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\n </ion-button>\n\n }\n\n @if (showSeeCopy) {\n\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\n </ion-button>\n\n }\n\n\n </ion-item>\n }\n @else {\n <ion-input #inputText [type]=\"type\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\"\n [placeholder]=\"placeholder\" class=\"modern\" maxlength=\"{{ max }}\" \n [value]=\"data\" mode=\"md\"\n (input)=\"writeValue(inputText.value, type)\" \n (ionInput)=\"onInputChange($event)\" \n (ionBlur)=\"onBlur()\" \n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake-modern' : '' \"\n [disabled]=\"readonly\" [shape]=\"shape\">\n @if (icon || iconSrc) {\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\n }\n\n @if (showSeePassword) {\n\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\n (click)=\"changeTypeOfInput()\">\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\n </ion-button>\n\n }\n\n @if (showSeeCopy) {\n\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\n </ion-button>\n\n }\n </ion-input>\n }\n\n @if(form) {\n <div class=\"validation-errors\">\n\n @for(validation of validation_messages; track validation.type) {\n <ng-container>\n @if(form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\n form.get(formControlName)?.touched)) {\n <div class=\"error-message\" [ngClass]=\"validationClass\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n\n </div>\n }\n\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { IonIcon } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-tree-view-nivel',\r\n imports: [IonIcon, ],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n templateUrl: './tree-view-nivel.html',\r\n styleUrl: './tree-view-nivel.scss',\r\n})\r\nexport class TreeViewNivelComponent implements OnInit {\r\n @Output() nivelClick = new EventEmitter();\r\n @Input() node: any;\r\n @Input() nivel: number = 1;\r\n @Input() currentSearch: string = ''; \r\n\r\n identacao: string = '';\r\n\r\n constructor(private sanitizer: DomSanitizer) { }\r\n\r\n ngOnInit() {\r\n for (let i=0; i<this.nivel;i++) {\r\n this.identacao += '<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>';\r\n }\r\n //console.log('IDENT', this.identacao)\r\n }\r\n\r\n nodeClick() {\r\n if (this.nivelClick) {\r\n this.nivelClick.emit(this.node);\r\n }\r\n }\r\n\r\n highlight(texto: string): any { \r\n if (!this.currentSearch)\r\n return texto;\r\n let index = texto.toLowerCase().indexOf(this.currentSearch.toLowerCase());\r\n //console.log(index);\r\n if (index >= 0) {\r\n return this.sanitizer.bypassSecurityTrustHtml(texto.substring(0, index) + '<strong style=\"background-color: yellow !important;\">' + texto.substring(index, index + this.currentSearch.length) + '</strong>' + texto.substring(index + this.currentSearch.length)); //texto.replace(this.textoPesquisa, `<strong>${this.textoPesquisa}</strong>`);\r\n } else {\r\n return texto;\r\n }\r\n }\r\n}\r\n\r\n","<span [innerHtml]=\"identacao\" class=\"node-link\"></span>\n<!-- mostrar a seta se tiver filhos ou se for raiz (nivel = 0)-->\n@if (!node.Expandido && (node.Filhos.length > 0 || nivel == 0)) {\n<span class=\"node-link\" (click)=\"node.Expandido = !node.Expandido\" class=\"boxSeta\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n</span>\n} \n@if (node.Expandido) {\n<span class=\"node-link\" (click)=\"node.Expandido = !node.Expandido\" class=\"boxSeta\">\n <ion-icon name=\"chevron-down-outline\"></ion-icon>\n</span>\n}\n<!--\n<span *ngIf=\"!node.Expandido\">&nbsp;&nbsp;&nbsp;</span>\n-->\n\n<!-- \n<span [class]=\"{ 'node-link' : node.Clicable === true, 'node-disabled': node.Clicable === false }\" (click)=\"nodeClick()\" title=\"{{ node.Label }}\"> {{ node.Label }}</span>\n-->\n<span [class]=\"{ 'node-link' : node.Clicable === true, 'node-disabled': node.Clicable === false }\" (click)=\"nodeClick()\"\n title=\"{{ node.Label }}\" [innerHTML]=\"highlight(node.Label)\"></span>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { TreeViewNivelComponent } from '../tree-view-nivel/tree-view-nivel';\nimport { Tree } from '../../lib/model/tree-model';\n\n@Component({\n selector: 'kb-tree-view',\n imports: [TreeViewNivelComponent],\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './tree-view.html',\n styleUrl: './tree-view.scss',\n\n})\nexport class TreeViewComponent implements OnInit {\n @Input() itens: any[] = [];\n @Input() campoId!: string;\n @Input() campoPai!: string;\n @Input() campoLabel!: string;\n @Input() cadastro: string = '';\n //sera o nome da chamada put, ex: [endpoint: CentroCustoPai]/id/pai\n //@Input() endpoint: string;\n @Input() caixaClass: string = 'caixa';\n @Output() beforeUpdate = new EventEmitter(); \n @Input() currentSearch: string = '';\n @Output() selecionarRegistro = new EventEmitter();\n\n arvore: Tree[] = [];\n\n ngOnInit(): void {\n //throw new Error('Method not implemented.');\n }\n\n montaArvore(pai: number, arvore: Tree[]): number {\n if (arvore && arvore.length > 0) {\n //procurar os filhos de cada no\n arvore.forEach(f => {\n //console.log('no atual:', f, );\n let filhos = this.itens.filter(i => i[this.campoPai] == f.Id);\n //console.log('filhos atual:', filhos);\n f.Filhos = [];\n filhos.forEach(fi => {\n f.Filhos.push({ Id: fi[this.campoId], Pai: f.Id, Label: fi[this.campoLabel], Filhos: [], Expandido: false, Clicable: (fi['ClicableTree'] == null || fi['ClicableTree'] === true) });\n });\n return this.montaArvore(0, f.Filhos);\n });\n return 0;\n } else {\n //console.log('sem filhos');\n return 0;\n }\n }\n\n arvoreClick(before: boolean = true) {\n if (this.beforeUpdate && before) {\n this.beforeUpdate.emit();\n return;\n }\n this.arvore = [];\n //console.log('tree itens', this.itens);\n if (this.itens && this.itens.length > 0) {\n //montar arvore pais\n this.itens.forEach(it => {\n if (this.campoPai && it[this.campoPai] == null) {\n //é pai\n this.arvore.push({ Id: it[this.campoId], Pai: null, Label: it[this.campoLabel], Filhos: [], Expandido: false, Clicable: (it['ClicableTree'] == null || it['ClicableTree'] === true) });\n\n }\n })\n this.montaArvore(0, this.arvore);\n\n console.log('arvore', this.arvore);\n }\n }\n\n expandir(arvore?: Tree[]): number {\n if (arvore == null) {\n arvore = this.arvore;\n }\n if (arvore && arvore.length > 0) {\n //procurar os filhos de cada no\n arvore.forEach(f => {\n //expandir\n f.Expandido = true;\n return this.expandir(f.Filhos);\n });\n return 0;\n } else {\n //console.log('sem filhos');\n return 0;\n }\n }\n\n carregarRegistro(node: Tree) {\n console.log('carrega registro', node);\n this.selecionarRegistro.next({ Cadastro: this.cadastro, Id: node.Id });\n }\n}\n","<div style=\"position: relative; height: auto; padding-left: 2%; background-color: white;\">\n @if (arvore) {\n <div [class]=\"caixaClass\" style=\"padding-left: 6px; font-size: 12px;\">\n <!-- raiz --> \n @for (raiz of arvore; track raiz.Id) { \n <div class=\"coluna\">\n <kb-tree-view-nivel [nivel]=\"0\" [node]=\"raiz\" [currentSearch]=\"currentSearch\"\n (nivelClick)=\"raiz.Clicable === true ? carregarRegistro(raiz) : null\">\n </kb-tree-view-nivel>\n \n @if(raiz.Expandido) {\n <div class=\"filho\">\n @for (nivel1 of raiz.Filhos; track nivel1.Id) {\n <div draggable=\"true\">\n <kb-tree-view-nivel [nivel]=\"1\" [node]=\"nivel1\" [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel1.Clicable === true ? carregarRegistro(nivel1): null\">\n </kb-tree-view-nivel>\n\n @if (nivel1 && nivel1.Expandido) {\n <div class=\"filho\">\n @for(nivel2 of nivel1.Filhos; track nivel2.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"2\" [node]=\"nivel2\" [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel2.Clicable === true ? carregarRegistro(nivel2): null\">\n </kb-tree-view-nivel>\n\n @if(nivel2 && nivel2.Expandido) {\n <div class=\"filho\">\n @for (nivel3 of nivel2.Filhos; track nivel3.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"3\" [node]=\"nivel3\" [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel3.Clicable === true ? carregarRegistro(nivel3): null\">\n </kb-tree-view-nivel>\n @if (nivel3 && nivel3.Expandido) {\n <div class=\"filho\">\n @for (nivel4 of nivel3.Filhos; track nivel4.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"4\" [node]=\"nivel4\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel4.Clicable === true ? carregarRegistro(nivel4): null\">\n </kb-tree-view-nivel>\n @if (nivel4 && nivel4.Expandido) {\n <div class=\"filho\">\n @for (nivel5 of nivel4.Filhos; track nivel5.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"5\" [node]=\"nivel5\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel5.Clicable === true ? carregarRegistro(nivel5): null\"></kb-tree-view-nivel>\n @if (nivel5 && nivel5.Expandido) {\n <div class=\"filho\">\n @for(nivel6 of nivel5.Filhos; track nivel6.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"6\" [node]=\"nivel6\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel6.Clicable === true ? carregarRegistro(nivel6): null\"></kb-tree-view-nivel>\n @if (nivel6 && nivel6.Expandido) {\n <div class=\"filho\">\n @for (nivel7 of nivel6.Filhos; track nivel7.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"7\" [node]=\"nivel7\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel7.Clicable === true ? carregarRegistro(nivel7): null\"></kb-tree-view-nivel>\n @if (nivel7 && nivel7.Expandido) {\n <div class=\"filho\">\n @for (nivel8 of nivel7.Filhos; track nivel8.Id)\n {\n <div>\n <kb-tree-view-nivel [nivel]=\"8\"\n [node]=\"nivel8\"\n (nivelClick)=\"nivel8.Clicable === true ? carregarRegistro(nivel8): null\"></kb-tree-view-nivel>\n @if (nivel8 && nivel8.Expandido) {\n <div class=\"filho\">\n @for (nivel9 of nivel8.Filhos; track\n nivel9.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"9\"\n [node]=\"nivel9\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel9.Clicable === true ? carregarRegistro(nivel9): null\"></kb-tree-view-nivel>\n\n @if (nivel9 && nivel9.Filhos) {\n <div class=\"filho\">\n @for (nivel10 of nivel9.Filhos;\n track nivel10.Id) {\n <div>\n <kb-tree-view-nivel\n [nivel]=\"10\"\n [node]=\"nivel10\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel10.Clicable === true ? carregarRegistro(nivel10): null\"></kb-tree-view-nivel>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }","import { ChangeDetectionStrategy, Component, Injector, Input, OnInit, Predicate, ViewChild } from '@angular/core';\r\nimport { TreeViewComponent } from '../tree-view/tree-view';\r\nimport { LoadingController, IonHeader, IonToolbar, IonTitle, IonButtons, IonButton, IonIcon, IonContent, IonItem, ModalController } from '@ionic/angular';\r\n\r\nimport { Subscription } from 'rxjs';\r\nimport { DataService } from '../../entity/services/data.service';\r\n\r\n@Component({\r\n selector: 'kb-modal-treeview',\r\n imports: [IonItem, IonContent, IonIcon, IonButton, IonButtons, IonTitle, IonToolbar, IonHeader, \r\n TreeViewComponent\r\n ],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n templateUrl: './modal-treeview.html',\r\n styleUrl: './modal-treeview.scss',\r\n})\r\nexport class ModalTreeviewComponent implements OnInit {\r\n titulo: string = \"Selecionar\";\r\n campoId!: string;\r\n campoPai!: string ;\r\n campoLabel!: string;\r\n @Input() textoPesquisa: string = \"\";\r\n // empresaSelecionadaId: number;\r\n // empresaContabilidadeId: number;\r\n listaArvore: any[] = [];\r\n tipo!: string;\r\n //url da API para pesquisar os itens\r\n url!: string;\r\n //subscriptionClick: Subscription;\r\n subscribeId: string = '';\r\n //função para filtrar registros que podem ser clicados\r\n filterFunction: Predicate<any> | undefined;\r\n //especificos\r\n //planoContas: number;\r\n maximizar: boolean = false;\r\n @ViewChild(\"treeViewComp\") treeView!: TreeViewComponent;\r\n\r\n constructor(\r\n private dataService: DataService,\r\n //public modalCtrl: ModalController,\r\n private injector: Injector,\r\n private loadingCtrl: LoadingController) {\r\n }\r\n ngOnInit(): void {\r\n }\r\n\r\n ionViewDidEnter() {\r\n this.atualizaArvoreEntidade(this.tipo);\r\n }\r\n\r\n async atualizaArvoreEntidade(tipo: string) {\r\n let subscriptionC: Subscription;\r\n this.treeView.cadastro = this.subscribeId;\r\n let loading = await this.showLoading(\"Pesquisando...\", true);\r\n loading.onDidDismiss().then(() => {\r\n subscriptionC?.unsubscribe();\r\n });\r\n\r\n //this.url = this.url.startsWith('http') ? this.url : `${this.BASE_API}/${this.url}`;\r\n\r\n //var url = this.url.replace('<<EMPRESA>>', this.empresaSelecionadaId.toString());\r\n var url = this.url.replace('<<FILTRO>>', '');\r\n // if (this.textoPesquisa) {\r\n // url += `?filtro=${this.textoPesquisa}`;\r\n // }\r\n\r\n subscriptionC = this.dataService.getLista(url).subscribe({\r\n next: (result: any[]) => {\r\n\r\n\r\n /*\r\n empresaContato.forEach((ec) => {\r\n ec.LabelTree = ec.Nome;\r\n ec.EmpresaContatoPaiId = null; //campo ficticio para montar arvore\r\n ec.ClicableTree = true;\r\n });\r\n\r\n this.treeView.campoId = \"EmpresaContatoId\";\r\n this.treeView.campoPai = \"EmpresaContatoPaiId\";\r\n this.treeView.campoLabel = \"LabelTree\";\r\n this.treeView.itens = empresaContato;\r\n this.treeView.arvoreClick(false);\r\n */\r\n\r\n\r\n if (!this.campoPai) {\r\n this.campoPai = `${this.campoId}Pai`;\r\n }\r\n\r\n\r\n result.forEach((cc) => {\r\n cc.LabelTree = cc[this.campoLabel];\r\n if (this.campoPai && !cc[this.campoPai]) {\r\n cc[this.campoPai] = null;\r\n }\r\n\r\n if (this.filterFunction != null) {\r\n const clicable = [{ ...cc }].find(this.filterFunction);\r\n if (clicable != null && cc.ClicableTree == null) {\r\n cc.ClicableTree = true;\r\n } else {\r\n cc.ClicableTree = false;\r\n }\r\n } else {\r\n cc.ClicableTree = true;\r\n }\r\n });\r\n\r\n console.log('tree result', result);\r\n\r\n this.treeView.campoId = this.campoId;\r\n this.treeView.campoPai = this.campoPai;\r\n this.treeView.campoLabel = this.campoLabel;\r\n this.treeView.itens = result;\r\n this.treeView.arvoreClick(false);\r\n\r\n loading.dismiss();\r\n },\r\n error: (error) => {\r\n loading.dismiss();\r\n console.log(\"Erro ao carregar os registros. Tente mais tarde.\");\r\n }\r\n });\r\n\r\n }\r\n\r\n clickRegistro(evento: any) {\r\n console.log('click registro', evento);\r\n if (evento.Id > 0) {\r\n const modalCtrl = this.injector.get(ModalController);\r\n modalCtrl.dismiss({ Id: evento.Id });\r\n }\r\n }\r\n\r\n expandir() {\r\n this.treeView.expandir(); \r\n }\r\n\r\n //utils\r\n async showLoading(msg: string, cancelable: boolean = false): Promise<HTMLIonLoadingElement> {\r\n const loading = await this.loadingCtrl.create({\r\n message: msg,\r\n backdropDismiss: cancelable\r\n //duration: 2000\r\n });\r\n /*\r\n loading.onDidDismiss().then(() => {\r\n console.log('loading dissmissed', request);\r\n if (request.subscription) {\r\n request.subscription.unsubscribe();\r\n }\r\n });\r\n */\r\n await loading.present();\r\n return loading;\r\n\r\n }\r\n\r\n fechar() {\r\n const modalCtrl = this.injector.get(ModalController); \r\n modalCtrl.dismiss()\r\n }\r\n \r\n}\r\n","<ion-header>\n <ion-toolbar color=\"secondary\">\n <ion-title>{{ titulo }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"atualizaArvoreEntidade(tipo)\">\n <ion-icon slot=\"icon-only\" name=\"refresh\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"fechar()\">Fechar</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-item>\n <ion-button style=\"box-shadow: #4c8dff 0px 2px 2px 0.05px;\" fill=\"outline\" (click)=\"expandir()\">\n <ion-icon name=\"expand-outline\"></ion-icon>\n </ion-button> \n </ion-item>\n <kb-tree-view #treeViewComp [campoId]=\"campoId\" [campoPai]=\"campoPai\" [campoLabel]=\"'LabelTree'\" (selecionarRegistro)=\"clickRegistro($event)\"></kb-tree-view>\n </ion-content>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Injector, Input, OnInit, Output, Predicate, Renderer2, ViewChild } from '@angular/core';\r\nimport { IonItem, IonLabel, IonSpinner, IonInput, IonButton, IonIcon, IonList, IonSelect, ModalController } from \"@ionic/angular\";\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { debounceTime, of, Subject, Subscription, switchMap } from 'rxjs';\r\nimport { NgClass } from '@angular/common';\r\nimport { ModalTreeviewComponent } from '../modal-treeview/modal-treeview';\r\nimport { DataService } from '../../entity/services/data.service';\r\n\r\n@Component({\r\n selector: 'kb-input-pesquisa',\r\n imports: [IonList, IonIcon, IonButton, IonInput, IonSpinner, IonLabel, IonItem, NgClass],\r\n templateUrl: './input-pesquisa.html',\r\n styleUrls: ['./input-pesquisa.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputPesquisaComponent,\r\n multi: true, \r\n }]\r\n})\r\nexport class InputPesquisaComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n podePesquisar: boolean = true;\r\n @Input() textoPesquisa: string = '';\r\n private filtro: string = '';\r\n selectElementVisivel: boolean = false;\r\n listaPesquisa: any[] = [];\r\n selectedItem: any;\r\n @Input() override max: string = '30';\r\n private pesquisaSubject: Subject<string> = new Subject();\r\n\r\n @Input() filterFunction: Predicate<any> | undefined;\r\n @Input() selectId: string = 'selectElement';\r\n @Input() campoId: string = 'Id';\r\n @Input() campoPaiId: string = 'PaiId';\r\n @Input() campoDisplay: string = 'Descricao';\r\n @Input() tipo: string = '';\r\n //@ViewChild('selectElement', { read: ElementRef, static: true }) selectElement;\r\n @ViewChild('selectElement', { static: false }) selectElement: IonSelect | undefined;\r\n @ViewChild(\"inputPesquisa\", { read: ElementRef, static: true }) inputPesquisa: ElementRef | undefined;\r\n //@Input() change: Function;\r\n @Output() pesquisaChange = new EventEmitter();\r\n\r\n @Output() limpar = new EventEmitter();\r\n //parametros para chamada API\r\n //endpoint para pesquisa por digitação\r\n @Input() url: string = '';\r\n @Input() urlItem: string = '';\r\n @Input() empresa: number = 0;\r\n @Input() loadInit: boolean = true;\r\n\r\n //endpoint para montar a arvore, se estiver vazia será usado o campo 'url'\r\n @Input() urlTree: string = '';\r\n @Input() treeTitulo: string = '';\r\n\r\n //control value acessor\r\n public data: number | null = null;\r\n private onChange: Function = (data: number) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n modelChanged: Subject<any> = new Subject<any>();\r\n modelChangeSubscription: Subscription;\r\n\r\n writeValue(value: number | null): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n if (value == null || value == 0) {\r\n this.writePesquisa('');\r\n this.selectedItem = null;\r\n } else {\r\n\r\n if (this.loadInit == true) {\r\n this.loadInit = false;\r\n this.carregaItemIdParaLista(value, false);\r\n } else if (!this.selectedItem || (this.selectedItem && this.selectedItem[this.campoId] != value)) {\r\n //console.log('Id diferente'); \r\n this.carregaItemIdParaLista(value, false);\r\n }\r\n /*\r\n if (this.loadInit == true) {\r\n this.loadInit = false;\r\n this.modelChanged.next(value);\r\n //this.carregaItemIdParaLista(value);\r\n } else {\r\n //console.log(this.selectedItem);\r\n if (!this.selectedItem || (this.selectedItem && this.selectedItem[this.campoId] != value)) {\r\n console.log('Id diferente');\r\n this.modelChanged.next(value);\r\n //this.carregaItemIdParaLista(value);\r\n } \r\n }\r\n */\r\n }\r\n\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n constructor(private dataService: DataService,\r\n private renderer: Renderer2,\r\n //private modalCtrl: ModalController,\r\n private injector: Injector\r\n ) {\r\n super();\r\n\r\n this.modelChangeSubscription = this.modelChanged\r\n .pipe(debounceTime(1000)\r\n )\r\n .subscribe(data => {\r\n this.carregaItemIdParaLista(data);\r\n });\r\n }\r\n\r\n onBlur(event: any) {\r\n //console.log('blur', event);\r\n //console.log(event.detail.relatedTarget);\r\n if (event.detail.relatedTarget == null || event.detail.relatedTarget.id.indexOf(this.selectId + 'IonItem') == -1) {\r\n //console.log(\"true\", event.detail.relatedTarget?.id);\r\n //pesquisar item na lista\r\n if (!this.existeNaListaTexto(this.textoPesquisa, true)) {\r\n this.limparClick();\r\n }\r\n\r\n this.dropDownPesquisa(0);\r\n if (this.form != null) {\r\n this.form?.get(this.formControlName)?.markAsTouched();\r\n }\r\n\r\n if (this.classic) {\r\n setTimeout(() => {\r\n this.renderer.removeClass(this.inputPesquisa?.nativeElement, \"item-has-focus\");\r\n }, 200);\r\n }\r\n\r\n this.blur.emit(this.data);\r\n\r\n }\r\n }\r\n\r\n override ngOnInit() {\r\n this.pesquisaSubject.pipe(debounceTime(2000), switchMap((url) => {\r\n //this.console.log('subject url:', url);\r\n if (!!url)\r\n return this.dataService.getLista<any>(url);\r\n else\r\n return of([]);\r\n }))\r\n .subscribe({\r\n next: (result: any) => {\r\n //this.listaPesquisa = result;\r\n //this.console.log('subject subscribe result:', result);\r\n this.listaPesquisa = [];\r\n\r\n if (result && result.length > 0) {\r\n if (this.filterFunction) {\r\n result = result.filter(this.filterFunction);\r\n }\r\n\r\n result.forEach((ent: any, index: any) => {\r\n this.listaPesquisa.push({ ...ent, Index: index, Selected: false });\r\n });\r\n }\r\n\r\n this.podePesquisar = true;\r\n if (this.listaPesquisa.length > 0) {\r\n this.dropDownPesquisa(this.listaPesquisa.length);\r\n }\r\n }, error: (error) => {\r\n this.podePesquisar = true;\r\n //console.log('erro pesquisa', error);\r\n }\r\n });\r\n }\r\n\r\n writePesquisa(value: string | any): void {\r\n //console.log('write pesquisa', value);\r\n this.textoPesquisa = value;\r\n if (value) {\r\n this.filtro = value;\r\n }\r\n }\r\n\r\n showPesquisa(e: any): void {\r\n //console.log('show pesquisa', e.keyCode);\r\n var self = this;\r\n const index = e.target.selectionStart >= 1 ? (e.target.selectionStart - 1) : 0;\r\n //console.log(index, 'valor ', e.target.value, 'char ', e.target.value.charCodeAt(index));\r\n const keyAt = e.target.value.charCodeAt(index);\r\n /*\r\n if ((e.keyCode >= 48 && e.keyCode <= 57) ||\r\n (keyAt >= 48 && keyAt <= 57) ||\r\n (e.keyCode >= 65 && e.keyCode <= 90) ||\r\n (e.keyCode >= 96 && e.keyCode <= 105) ||\r\n (e.keyCode == 8)) \r\n */\r\n\r\n if (e.keyCode == 13) {\r\n //console.log('enter key', e)\r\n //self.selecionarComboClick(e);\r\n self.selecionarComboClick(null);\r\n return;\r\n } else\r\n if (e.keyCode != 40 && e.keyCode != 38) {\r\n if (!self.podePesquisar) {\r\n return;\r\n }\r\n let filtro = self.textoPesquisa;\r\n if (filtro != null && filtro != '' && filtro.length >= 2) {\r\n self.pesquisarEntidade(filtro);\r\n\r\n }\r\n else {\r\n if (e.keyCode == 8 && !filtro) {\r\n this.limparClick();\r\n }\r\n }\r\n }\r\n\r\n else {\r\n if (e.keyCode == 40 || e.keyCode == 38) {\r\n self.dropDownPesquisa(self.listaPesquisa.length);\r\n if (self.selectElementVisivel == true) {\r\n //let select = self.selectElement; //document.getElementById(self.TemplateSelect1Id());\r\n\r\n //ion-list\r\n //selecionado\r\n //console.log(self.listaPesquisa);\r\n let inc = e.keyCode == 40 ? 1 : -1;\r\n let selected = self.listaPesquisa.find(s => s['Selected'] === true);\r\n let cur = 0;\r\n if (selected != null) {\r\n cur = selected['Index'];\r\n //desmarcar o atual\r\n selected['Selected'] = false;\r\n cur = cur + inc;\r\n } else {\r\n cur = 0;\r\n }\r\n\r\n if (cur < 0) {\r\n cur = self.listaPesquisa.length - 1;\r\n } else if (cur >= self.listaPesquisa.length) {\r\n cur = 0;\r\n }\r\n\r\n let novoSelected = self.listaPesquisa.find(n => n['Index'] === cur);\r\n if (novoSelected != null) {\r\n novoSelected['Selected'] = true;\r\n self.selectedItem = novoSelected;\r\n self.textoPesquisa = novoSelected[self.campoDisplay];\r\n }\r\n /*\r\n let select = document.getElementById(this.selectId) as any;\r\n console.log('select Element', select)\r\n if (select != null) {\r\n let inc = e.keyCode == 40 ? 1 : -1;\r\n let cur = select.selectedIndex;\r\n if (cur == NaN) cur = -1;\r\n select.selectedIndex = cur + inc;\r\n if (select.selectedIndex >= 0 && select.selectedIndex < self.listaPesquisa.length) {\r\n self.selectedItem = self.listaPesquisa[select.selectedIndex];\r\n if (self.selectedItem != null) {\r\n self.textoPesquisa = self.selectedItem[self.campoDisplay];\r\n }\r\n }\r\n }\r\n */\r\n }\r\n\r\n } else\r\n if (e.keyCode == 13) {\r\n //console.log('enter key', e)\r\n //self.selecionarComboClick(e);\r\n self.selecionarComboClick(null);\r\n return;\r\n } else if (e.keyCode == 27) {\r\n //ESC\r\n self.dropDownPesquisa(0);\r\n }\r\n }\r\n\r\n }\r\n\r\n highlight(texto: string): string {\r\n let index = texto.toLowerCase().indexOf(this.textoPesquisa.toLowerCase());\r\n //console.log(index);\r\n if (index >= 0) {\r\n return texto.substring(0, index) + '<strong>' + texto.substring(index, index + this.textoPesquisa.length) + '</strong>' + texto.substring(index + this.textoPesquisa.length); //texto.replace(this.textoPesquisa, `<strong>${this.textoPesquisa}</strong>`);\r\n } else {\r\n return texto;\r\n }\r\n }\r\n\r\n selecionarComboClick(item: any, emitChange: boolean = true) {\r\n console.log(item);\r\n var self = this;\r\n this.loadInit = false;\r\n // console.log('combo click', self);\r\n\r\n /*\r\n let select = document.getElementById(this.selectId) as any;\r\n if (select.selectedIndex >= 0) {\r\n self.selectedItem = self.listaPesquisa[select.selectedIndex];\r\n }\r\n console.log('selected', this.selectedItem);\r\n //self.selectedItem = this.listaPesquisa.find(i => i[this.campoId] == e);\r\n if (self.selectedItem != null) {\r\n self.textoPesquisa = self.selectedItem[self.campoDisplay];\r\n self.writeValue(self.selectedItem[self.campoId]);\r\n if (e != null) {\r\n self.selectElementVisivel = false;\r\n if (self.action != null) {\r\n self.action(self.selectedItem(), e);\r\n }\r\n }\r\n }\r\n else {\r\n self.selectElementVisivel = false;\r\n }\r\n */\r\n // pesquisar selecionado\r\n // console.log(this.listaPesquisa);\r\n let selected = this.listaPesquisa.find(s => s['Selected'] === true);\r\n\r\n // if (!selected) {\r\n // console.log(this.campoId, item);\r\n // selected = this.listaPesquisa.filter( s => s[this.campoId] == item[this.campoId]);\r\n // }\r\n\r\n //se o item form passado como parametro (click no ion-item)\r\n if (item != null) {\r\n if (selected != null) {\r\n selected['Selected'] = false;\r\n }\r\n item['Selected'] = true;\r\n selected = item;\r\n }\r\n if (selected != null) {\r\n self.selectedItem = selected;\r\n self.textoPesquisa = selected[self.campoDisplay];\r\n self.writeValue(selected[self.campoId]);\r\n self.selectElementVisivel = false;\r\n //console.log('action', self.change);\r\n if (self.pesquisaChange != null && emitChange) {\r\n //console.log('pesquisaChange selecionarComboClick', item);\r\n self.pesquisaChange.emit(self.selectedItem);\r\n }\r\n } else {\r\n self.selectElementVisivel = false;\r\n }\r\n\r\n console.log('visible', this.selectElementVisivel);\r\n // this.listaPesquisa.forEach( pesquisa => {\r\n // console.log(pesquisa, self.data);\r\n // } );\r\n // console.log(this.textoPesquisa);\r\n }\r\n\r\n selecionarComboChange(e: any) {\r\n var self = this;\r\n //console.log('combo change', e);\r\n self.selectedItem = this.listaPesquisa.find(i => i[this.campoId] == e);\r\n if (self.selectedItem != null) {\r\n self.writeValue(e);\r\n self.textoPesquisa = self.selectedItem[self.campoDisplay];\r\n if (e != null) {\r\n self.selectElementVisivel = false;\r\n if (self.pesquisaChange != null) {\r\n //self.pesquisaChange.emit(self.selectedItem, e);\r\n //console.log('pesquisaChange selecionarComboChange', e);\r\n self.pesquisaChange.emit(self.selectedItem);\r\n }\r\n }\r\n }\r\n else {\r\n self.selectElementVisivel = false;\r\n }\r\n }\r\n\r\n dropDownPesquisa(length: number) {\r\n var self = this;\r\n if (self.listaPesquisa != null && self.listaPesquisa.length > 0) {\r\n if (length == -1) {\r\n length = self.listaPesquisa.length;\r\n }\r\n self.selectElementVisivel = length == 0 ? false : true;\r\n\r\n //console.log(this.selectElement);\r\n //this.selectElement.open();\r\n\r\n /*\r\n //let element = this.selectElement;\r\n let element = document.getElementById(this.selectId);\r\n console.log('dropDown', element);\r\n (element as any).size = length + 1;\r\n if (length == 0) {\r\n self.selectElementVisivel = false;\r\n } else {\r\n self.selectElementVisivel = true;\r\n }\r\n */\r\n }\r\n }\r\n\r\n pesquisarEntidade(filtro: string) {\r\n let url = this.url.replace('<<FILTRO>>', filtro).replace('<<EMPRESA>>', this.empresa.toString());\r\n //console.log('pesquisarEntidade url', url);\r\n this.podePesquisar = false;\r\n this.pesquisaSubject.next(url);\r\n }\r\n\r\n pesquisarEntidadeOld(filtro: string) {\r\n let url = this.url.replace('<<FILTRO>>', filtro).replace('<<EMPRESA>>', this.empresa.toString());\r\n //console.log('pesquisarEntidade url', url);\r\n this.podePesquisar = false;\r\n this.dataService.getLista<any>(url)\r\n .subscribe({\r\n next: (result: any) => {\r\n //this.listaPesquisa = result;\r\n if (this.filterFunction) {\r\n result = result.filter(this.filterFunction);\r\n }\r\n this.listaPesquisa = [];\r\n result.forEach((ent: any, index: any) => {\r\n this.listaPesquisa.push({ ...ent, Index: index, Selected: false });\r\n });\r\n\r\n this.podePesquisar = true;\r\n if (this.listaPesquisa.length > 0) {\r\n this.dropDownPesquisa(this.listaPesquisa.length);\r\n }\r\n }, error: (error: any) => {\r\n console.log('erro pesquisa', error);\r\n this.podePesquisar = true;\r\n }\r\n });\r\n }\r\n\r\n existeNaLista(id: number, setRegistro: boolean = false): boolean {\r\n if (this.listaPesquisa && this.listaPesquisa.length > 0) {\r\n let existe = this.listaPesquisa.find(l => l[this.campoId] === id);\r\n if (existe) {\r\n if (setRegistro) {\r\n this.selectedItem = existe;\r\n this.selecionarComboClick(this.selectedItem);\r\n }\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n existeNaListaTexto(texto: string, setRegistro: boolean = false): boolean {\r\n //console.log(\"existe texto:\", texto, this.campoDisplay, this.listaPesquisa);\r\n if (this.listaPesquisa && this.listaPesquisa.length > 0) {\r\n let existe = this.listaPesquisa.find(l => l[this.campoDisplay].toUpperCase() === texto.toUpperCase());\r\n if (existe) {\r\n if (setRegistro) {\r\n this.selectedItem = existe;\r\n this.selecionarComboClick(this.selectedItem);\r\n }\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n validarItemSelecionado(setarRegistro: boolean = false): boolean {\r\n //console.log('validar selecionado');\r\n //passar pela função de filtro\r\n let valido = false;\r\n if (this.selectedItem) {\r\n if (this.filterFunction) {\r\n let existe = [{ ...this.selectedItem }].filter(this.filterFunction);\r\n if (existe != null && existe.length > 0) {\r\n valido = true;\r\n }\r\n } else {\r\n valido = true;\r\n }\r\n if (valido && setarRegistro) {\r\n this.selecionarComboClick(this.selectedItem);\r\n }\r\n\r\n return valido;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n carregaItemIdParaLista(id: number, emitchange: boolean = true) {\r\n let url = this.urlItem.replace('<<ID>>', id.toString());\r\n //console.log(this.urlItem);\r\n //console.log('pesquisar ID url', url);\r\n this.podePesquisar = false;\r\n this.dataService.getRequest<any>(url)\r\n .subscribe({\r\n next: (result: any) => {\r\n this.listaPesquisa = [];\r\n this.listaPesquisa.push({ ...result, Index: 0, Selected: true });\r\n this.podePesquisar = true;\r\n if (this.listaPesquisa.length > 0) {\r\n this.selectedItem = this.listaPesquisa[0];\r\n //if (emitchange) {\r\n this.selecionarComboClick(this.selectedItem, emitchange);\r\n //}\r\n }\r\n }, error: (error: any) => {\r\n console.log('erro pesquisa', error);\r\n this.podePesquisar = true;\r\n }\r\n });\r\n }\r\n\r\n carregaItemParaLista(item: any) {\r\n if (!item) {\r\n return;\r\n }\r\n this.listaPesquisa = [];\r\n this.listaPesquisa.push({ ...item, Index: 0, Selected: true });\r\n this.podePesquisar = true;\r\n if (this.listaPesquisa.length > 0) {\r\n this.selectedItem = this.listaPesquisa[0];\r\n this.selecionarComboClick(this.selectedItem);\r\n }\r\n }\r\n\r\n limparClick() {\r\n this.writeValue(null);\r\n this.writePesquisa(null);\r\n this.listaPesquisa = [];\r\n this.dropDownPesquisa(0);\r\n //this.podePesquisar = true;\r\n this.pesquisaSubject.next('');\r\n\r\n this.limpar.emit();\r\n\r\n }\r\n\r\n verificarPesquisa() {\r\n //TODO: verificar se o texto corresponde com um item da lista\r\n this.selecionarComboClick(null);\r\n }\r\n\r\n async pesquisarClick() { \r\n const modalCtrl = this.injector.get(ModalController);\r\n const modal = await modalCtrl.create({\r\n component: ModalTreeviewComponent,\r\n componentProps: {\r\n //campoId: this.campoId,\r\n //campoPai: this.campoPaiId,\r\n //campoLabel: this.campoDisplay\r\n textoPesquisa: this.textoPesquisa,\r\n filterFunction: this.filterFunction,\r\n empresaSelecionadaId: this.empresa,\r\n tipo: this.tipo,\r\n\r\n url: this.urlTree ? this.urlTree : this.url,\r\n titulo: this.treeTitulo,\r\n campoLabel: this.campoDisplay,\r\n campoId: this.campoId,\r\n campoPai: this.campoPaiId\r\n },\r\n cssClass: 'my-custom-modal-pesquisa my-custom-modal-background'\r\n });\r\n\r\n modal.onDidDismiss().then(data => {\r\n let result = data['data'];\r\n //console.log(result);\r\n if (result != null && result.Id > 0) {\r\n if (result.Entidade) {\r\n this.carregaItemParaLista(result.Entidade);\r\n } else {\r\n this.carregaItemIdParaLista(result.Id);\r\n }\r\n //this.carregaItemParaLista(result);\r\n }\r\n });\r\n modal.present();\r\n } \r\n\r\n setFocus() {\r\n this.inputPesquisa?.nativeElement.setFocus();\r\n }\r\n\r\n copiarClick() {\r\n try {\r\n console.log(this.inputPesquisa);\r\n const text = this.inputPesquisa?.nativeElement.value; //.options[this.inputPesquisa.nativeElement.selectedIndex].text;\r\n console.log(text);\r\n navigator.clipboard.writeText(text);\r\n //this.utils.showToast('Copiado')\r\n } catch {\r\n\r\n }\r\n }\r\n\r\n //\r\n\r\n entered() {\r\n //adicionar classe ao ion-item, não funcionou\r\n /*\r\n console.log('input focused');\r\n if (this.classic) {\r\n setTimeout(() => {\r\n this.renderer.addClass(this.inputPesquisa?.nativeElement, \"item-has-focus\");\r\n }, 100);\r\n }\r\n */\r\n }\r\n\r\n\r\n}\r\n\r\n","<div style=\"padding-inline-end: 0px;\" [class]=\"{ 'input-text-padding': !classic }\">\n @if (classic) {\n <ion-item lines=\"none\" [style.opacity]=\"readonly ? 0.5 : 1\"\n style=\"--background: inherited; --background-focused: transparent; margin-top: 2px;\"\n [class]=\"itemClass + ' classic'\" id=\"item-pesquisa\" #itemPesquisa>\n @if (label) {\n <ion-label style=\"color: var(--label-palavras);\" position=\"{{ labelPosition }}\">{{ label }}</ion-label>\n }\n <!-- formControlName=\"{{ campo }}\" -->\n @if (!podePesquisar) {\n <ion-spinner style=\"--min-height: 0px !important; margin-inline-end: 5px !important;\" class=\"botao-limpar\"\n slot=\"start\" name=\"lines\"></ion-spinner>\n }\n <!-- (ionBlur)=\"verificarPesquisa()\" -->\n <!-- conflito com click da lista -->\n <ion-input #inputPesquisa type=\"{{type}}\" [placeholder]=\"placeholder\" maxlength=\"{{ max }}\"\n (ionBlur)=\"onBlur($event)\" [value]=\"textoPesquisa\" (input)=\"writePesquisa(inputPesquisa.value)\"\n (keyup)=\"showPesquisa($event)\" autocomplete=\"off\"\n style=\"background-color: var(--input-color); color: var(--text-color);\" (click)=\"dropDownPesquisa(-1)\"\n [disabled]=\"readonly\" debounce=\"2000\" (ionFocus)=\"entered()\"></ion-input>\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\" class=\"botao-limpar\" id=\"btnLimparPesquisa\" fill=\"clear\"\n color=\"medium\" (click)=\"limparClick()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\" class=\"botao-limpar\" fill=\"clear\" color=\"medium\"\n (click)=\"pesquisarClick()\">\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\n </ion-button>\n\n @if (showSeeCopy) {\n <ion-button size=\"small\" slot=\"end\" style=\"margin-top: 27px; margin-inline-start: 4px !important;\" fill=\"clear\"\n color=\"dark\" (click)=\"copiarClick()\" [disabled]=\"!data\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n }\n </ion-item>\n } @else {\n <ion-input #inputPesquisa [type]=\"type\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\"\n [placeholder]=\"placeholder\" maxlength=\"{{ max }}\" (ionBlur)=\"onBlur($event)\" [value]=\"textoPesquisa\"\n (input)=\"writePesquisa(inputPesquisa.value)\" (keyup)=\"showPesquisa($event)\" autocomplete=\"off\" [mode]=\"mode\"\n style=\"background-color: var(--input-color); color: var(--text-color);\" (click)=\"dropDownPesquisa(-1)\"\n [disabled]=\"readonly\" debounce=\"2000\" class=\"modern\" (ionFocus)=\"entered()\">\n\n @if (!podePesquisar) {\n <ion-spinner slot=\"start\" name=\"lines\"></ion-spinner>\n }\n\n <ion-button slot=\"end\" tabindex=\"-1\" class=\"botao-limpar\" id=\"btnLimparPesquisa\" fill=\"clear\" color=\"medium\"\n (click)=\"limparClick()\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n\n <ion-button slot=\"end\" tabindex=\"-1\" class=\"botao-limpar\" fill=\"clear\" color=\"medium\" (click)=\"pesquisarClick()\">\n <ion-icon slot=\"icon-only\" color=\"primary\" name=\"search\"></ion-icon>\n </ion-button>\n\n @if (showSeeCopy) {\n <ion-button slot=\"end\" style=\"margin-top: 27px; margin-inline-start: 4px !important;\" fill=\"clear\" color=\"dark\"\n (click)=\"copiarClick()\" [disabled]=\"!data\">\n <ion-icon slot=\"icon-only\" name=\"copy-outline\"></ion-icon>\n </ion-button>\n }\n </ion-input>\n }\n <ion-list tabindex=\"-1\" [hidden]=\"!selectElementVisivel || !listaPesquisa || listaPesquisa.length == 0\"\n class=\"pesquisa-list\" style=\"max-height: 250px; overflow-y: auto;\">\n\n @for (item of listaPesquisa; track $index) {\n <ion-item tabindex=\"-1\" button (click)=\"selecionarComboClick(item)\" [id]=\"selectId + 'IonItem' + item['Index']\"\n (keyup.enter)=\"selecionarComboClick(item)\" class=\"pesquisa-item\">\n <!-- {{ item | json}} -->\n <span [class]=\"{'selected-item': item['Selected'] === true}\" [innerHTML]=\"highlight(item[campoDisplay])\"></span>\n </ion-item>\n }\n </ion-list>\n\n <!--\n <ion-select interface=\"popover\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\n (ionChange)=\"selecionarComboChange($event.target.value)\">\n <ion-select-option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\n {{ item[campoDisplay] }}\n </ion-select-option>\n </ion-select>\n -->\n\n <!--\n <select [id]=\"selectId\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\n (change)=\"selecionarComboChange($event.target.value)\" class=\"pesquisa-select\">\n <option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\n {{ item[campoDisplay] }}\n </option>\n\n </select>\n -->\n\n @if(form) {\n <div class=\"validation-errors\">\n @for (validation of validation_messages; track validation.type) {\n <ng-container>\n @if(form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\n form.get(formControlName)?.touched)) {\n <div class=\"error-message\" [ngClass]=\"validationClass\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n </div>\n }\n</div>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output, Renderer2, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonLabel, IonTextarea, IonIcon, IonButton } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-input-area',\r\n imports: [IonButton, IonIcon, IonTextarea, IonLabel, IonItem,],\r\n templateUrl: './input-area.html',\r\n styleUrls: ['./input-area.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputAreaComponent,\r\n multi: true\r\n }]\r\n})\r\nexport class InputAreaComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n @Input() linhas: number = 5;\r\n @Input() contador: boolean = false;\r\n @Output() inputChange = new EventEmitter();\r\n\r\n @ViewChild(\"itemArea\", { read: ElementRef }) itemArea: any;\r\n //control value acessor\r\n public data: string | any;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n writeValue(value: string | any): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n constructor(private renderer: Renderer2) {\r\n super();\r\n }\r\n\r\n override ngOnInit() {\r\n\r\n }\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n this.inputChange.emit(valor);\r\n }\r\n\r\n onBlur() {\r\n //remover classe do ion-item\r\n if (this.classic) {\r\n setTimeout(() => {\r\n //this.renderer.addClass(document.getElementById(\"item-select\"), \"item-has-focus\");\r\n this.renderer.removeClass(this.itemArea.nativeElement, \"item-has-focus\");\r\n //console.log('select focused', document.getElementById(\"item-select\"));\r\n }, 200);\r\n }\r\n\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n }\r\n\r\n entered() {\r\n //adicionar classe ao ion-item\r\n // console.log('select focused');\r\n if (this.classic) {\r\n setTimeout(() => {\r\n //this.renderer.addClass(document.getElementById(\"item-select\"), \"item-has-focus\");\r\n this.renderer.addClass(this.itemArea.nativeElement, \"item-has-focus\");\r\n //console.log('select focused', document.getElementById(\"item-select\"));\r\n }, 200);\r\n }\r\n }\r\n\r\n copiarClick() {\r\n let texto = this.data; \r\n navigator.clipboard.writeText(texto); \r\n } \r\n\r\n}\r\n\r\n","<div [class]=\"{ 'input-text-padding': !classic }\">\r\n @if (classic) {\r\n <ion-item lines=\"none\" style=\"--background-focused: transparent;\" [class]=\"itemClass\" #itemArea>\r\n <ion-label position=\"{{ labelPosition }}\">{{ label }}\r\n @if (showObrigatorio) {\r\n <span class=\"label-tip-obrigatorio\">{{\r\n form?.get(formControlName)?.hasError('required') ? ' ●' : ''}}\r\n </span>\r\n }\r\n </ion-label>\r\n <!-- formControlName=\"{{ formControlName }}\" -->\r\n <textarea #inputArea [placeholder]=\"placeholder\" [maxLength]=\"max\" (ionBlur)=\"onBlur()\" [value]=\"data\"\r\n [rows]=\"linhas\" (input)=\"writeValue(inputArea.value)\" [disabled]=\"readonly\" (focus)=\"entered()\"></textarea>\r\n </ion-item>\r\n } @else {\r\n\r\n <ion-textarea #inputArea [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\" [maxlength]=\"max\"\r\n class=\"modern\" [rows]=\"linhas\" (input)=\"writeValue(inputArea.value)\" (ionBlur)=\"onBlur()\"\r\n (ionInput)=\"onInputChange($event)\" [value]=\"data\" mode=\"md\" [counter]=\"contador\" [placeholder]=\"placeholder\">\r\n\r\n @if (icon || iconSrc) {\r\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\r\n }\r\n @if (showSeeCopy) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\r\n (click)=\"copiarClick()\">\r\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n </ion-textarea>\r\n\r\n }\r\n\r\n @if (form) {\r\n <div class=\"validation-errors\">\r\n\r\n @for (validation of validation_messages; track validation.type) {\r\n <ng-container>\r\n @if (form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\r\n form.get(formControlName)?.touched)) {\r\n <div class=\"error-message\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { Observable } from 'rxjs';\r\nimport { IonItem, IonLabel, IonInput, IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'kb-input-cep',\r\n imports: [IonIcon, IonButton, IonInput, IonLabel, IonItem, NgClass],\r\n templateUrl: './input-cep.html',\r\n styleUrls: ['./input-cep.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputCepComponent,\r\n multi: true\r\n }]\r\n})\r\nexport class InputCepComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n\r\n @Input() formato: string | null = '00000-000';\r\n @Input() keyEnter: Function | null = null;\r\n @Output() getResultados = new EventEmitter();\r\n @Output() inputChange = new EventEmitter();\r\n\r\n //control value acessor\r\n public data: string | any = null;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n constructor() {\r\n super();\r\n }\r\n\r\n writeValue(value: string | any): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n override ngOnInit(): void {\r\n }\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n this.inputChange.emit(valor);\r\n }\r\n\r\n digitarFormatado(event: any) {\r\n //console.log(event);\r\n if ((event.keyCode >= 48 && event.keyCode <= 57)\r\n || (event.keyCode >= 96 && event.keyCode <= 105)\r\n || (event.keyCode == 8)\r\n || (event.keyCode == 9)\r\n || (event.keyCode == 39)\r\n || (event.keyCode == 37)\r\n || (event.keyCode == 46)) {\r\n\r\n //console.log(this.formControlName, this.form.get(this.formControlName).value);\r\n\r\n setTimeout(() => {\r\n if (this.form) {\r\n this.form.patchValue({\r\n [this.formControlName]: this.formataCampoValor(this.form.get(this.formControlName)?.value, this.formato ?? '', event)\r\n });\r\n } else {\r\n this.data = this.formataCampoValor(this.data ?? '', this.formato ?? '', event);\r\n this.writeValue(this.data);\r\n }\r\n }, 100);\r\n\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n onKeyEnter() {\r\n if (this.keyEnter != null) {\r\n this.keyEnter();\r\n } else {\r\n if (this.getResultados != null) {\r\n this.pesquisarClick();\r\n }\r\n }\r\n }\r\n\r\n onBlur() {\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n if (this.blur) {\r\n this.blur.emit(this.blurArgs);\r\n }\r\n }\r\n\r\n formataCampoValor(valor: string, Mascara: string, evento: any) {\r\n //console.log(valor);\r\n if (!valor)\r\n return null;\r\n //console.log(evento);\r\n\r\n //if (!this.keypressInteiro(evento))\r\n // return;\r\n\r\n var boleanoMascara;\r\n\r\n var Digitato = evento != null ? evento.keyCode : 0;\r\n let exp = /\\-|\\.|\\/|\\(|\\)| /g\r\n let campoSoNumeros = valor.replace(exp, \"\");\r\n\r\n var posicaoCampo = 0;\r\n var NovoValorCampo = \"\";\r\n var TamanhoMascara = campoSoNumeros.length;;\r\n\r\n if (Digitato != 8) { // backspace \r\n for (let i = 0; i <= TamanhoMascara; i++) {\r\n boleanoMascara = ((Mascara.charAt(i) == \"-\") || (Mascara.charAt(i) == \".\")\r\n || (Mascara.charAt(i) == \"/\"))\r\n boleanoMascara = boleanoMascara || ((Mascara.charAt(i) == \"(\")\r\n || (Mascara.charAt(i) == \")\") || (Mascara.charAt(i) == \" \"))\r\n if (boleanoMascara) {\r\n NovoValorCampo += Mascara.charAt(i);\r\n TamanhoMascara++;\r\n } else {\r\n NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);\r\n posicaoCampo++;\r\n }\r\n }\r\n return NovoValorCampo;\r\n } else {\r\n return valor;\r\n }\r\n }\r\n\r\n pesquisarClick() {\r\n const cep = this.data;\r\n //se não estiver informado o cep, não fazer a pesquisa\r\n if (cep == null || cep == \"\") {\r\n return;\r\n }\r\n\r\n this.getEnderecoPeloCep(cep).subscribe({\r\n next: (result: any) => {\r\n console.log('result CEP', result);\r\n\r\n let cidadePesquisa: string = result.localidade;\r\n cidadePesquisa = this.converteCaracteresEspeciais(cidadePesquisa.toUpperCase());\r\n\r\n if (this.getResultados) {\r\n this.getResultados.emit(result);\r\n }\r\n\r\n }, error: (error: any) => {\r\n console.log(error);\r\n }\r\n });\r\n }\r\n\r\n //substituição de caracteres\r\n converteCaracteresEspeciais(nome: string): string {\r\n var res = nome.replace(/Ã/g, \"A\");\r\n res = res.replace(/Á/g, \"A\");\r\n res = res.replace(/Ç/g, \"C\");\r\n res = res.replace(/É/g, \"E\");\r\n res = res.replace(/Â/g, \"A\");\r\n res = res.replace(/Ô/g, \"O\");\r\n res = res.replace(/Ó/g, \"O\");\r\n res = res.replace(/Ú/g, \"U\");\r\n res = res.replace(/Í/g, \"I\");\r\n return res;\r\n }\r\n\r\n getEnderecoPeloCep(cep: any): Observable<any> {\r\n return new Observable((x) => {\r\n var request = new XMLHttpRequest();\r\n request.open('get', `https://viacep.com.br/ws/${cep}/json/`, true);\r\n request.send();\r\n request.onload = function () {\r\n var data = JSON.parse(this.response);\r\n x.next(data)\r\n }\r\n })\r\n }\r\n}\r\n\r\n","<!--\n<div [formGroup]=\"form\">\n-->\n<!--comando --inner-padding-end: utilizado pra remover padding desnecessários-->\n<div [class]=\"{ 'input-text-padding': !classic }\">\n @if (classic) {\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\"\n [class]=\"itemClass + ' classic'\"\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\n <ion-label [position]=\"labelPosition\">{{ label }}\n @if (showObrigatorio) {\n <span class=\"label-tip-obrigatorio\">{{\n form?.get(formControlName)?.hasError('required') ? ' ●' : ''}}\n </span>\n }\n </ion-label>\n <!-- formControlName={{formControlName}} -->\n <ion-input #inputCep type=\"tel\" [placeholder]=\"placeholder\" [maxlength]=\"max\"\n (keydown)=\"digitarFormatado($event)\" (keyup.enter)=\"onKeyEnter()\" (ionBlur)=\"onBlur()\" [value]=\"data\"\n (input)=\"writeValue(inputCep.value)\" [disabled]=\"readonly\"></ion-input>\n\n <ion-button fill=\"clear\" slot=\"end\" tabindex=\"-1\" color=\"medium\" class=\"btn-show-password\"\n (click)=\"pesquisarClick()\">\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\n </ion-button>\n\n </ion-item>\n } @else {\n <ion-input #inputCep type=\"tel\" [placeholder]=\"placeholder\" [maxlength]=\"max\" [label]=\"label\"\n [labelPlacement]=\"labelPosition\" fill=\"outline\" class=\"modern\" (keydown)=\"digitarFormatado($event)\"\n (keyup.enter)=\"onKeyEnter()\" (ionBlur)=\"onBlur()\" [value]=\"data\" (ionInput)=\"onInputChange($event)\"\n (input)=\"writeValue(inputCep.value)\" [disabled]=\"readonly\">\n\n <ion-button fill=\"clear\" slot=\"end\" tabindex=\"-1\" color=\"medium\" class=\"btn-show-password\"\n (click)=\"pesquisarClick()\">\n <ion-icon color=\"primary\" name=\"search\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-input>\n }\n @if (form) {\n <div class=\"validation-errors\">\n @for (validation of validation_messages; track validation.type) {\n <ng-container>\n @if (form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty\n || form.get(formControlName)?.touched)) {\n <div class=\"error-message\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n </div>\n }\n</div>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonLabel, IonInput, IonIcon, IonButton } from \"@ionic/angular\";\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'kb-input-valor',\r\n imports: [IonButton, IonIcon, IonInput, IonLabel, IonItem, NgClass],\r\n templateUrl: './input-valor.html',\r\n styleUrls: ['./input-valor.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputValorComponent,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputValorComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n @Input() maxValor: number | null = null;\r\n @Output() inputChange = new EventEmitter();\r\n @ViewChild('inputValor', { read: ElementRef, static: true}) inputValorEdit: any;\r\n //control value acessor\r\n public data: string | any;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n writeValue(value: string | any): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n override ngOnInit() { }\r\n\r\n onBlur() {\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n //verificar o valor\r\n if (this.maxValor) {\r\n if (this.form) {\r\n //console.log(this.form.get(this.formControlName).value);\r\n let valor = this.strToFloatZero(this.form?.get(this.formControlName)?.value);\r\n if (valor > this.maxValor) {\r\n this.form.patchValue({\r\n [this.formControlName]: this.converterValorDecimalMil((this.maxValor * 100).toString())\r\n });\r\n }\r\n } else {\r\n let valor = this.strToFloatZero(this.data);\r\n if (valor > this.maxValor) {\r\n this.data = this.converterValorDecimalMil((this.maxValor * 100).toString());\r\n this.writeValue(this.data);\r\n }\r\n }\r\n }\r\n if (this.blur) {\r\n this.blur.emit(this.blurArgs);\r\n }\r\n }\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n this.inputChange.emit(valor);\r\n }\r\n\r\n digitarValor(event: any) {\r\n //this.item.vendaunitario = this.utils.converterValorDecimal(this.item.vendaunitario);\r\n setTimeout(() => {\r\n if (this.form) {\r\n this.form.patchValue({\r\n [this.formControlName]: this.converterValorDecimalMil(this.form.get(this.formControlName)?.value) \r\n });\r\n } else {\r\n this.data = this.converterValorDecimalMil(this.data);\r\n this.writeValue(this.data);\r\n }\r\n }, 100);\r\n\r\n return true;\r\n }\r\n\r\n copiarClick() {\r\n // console.log(this.inputTextEdit.nativeElement);\r\n // console.log(this.inputTextEdit);\r\n let texto = this.data;\r\n navigator.clipboard.writeText(texto);\r\n //this.utils.showToast('Copiado')\r\n }\r\n\r\n isEmpty(str: string | any): boolean {\r\n return str == null || str == undefined || str == '';\r\n }\r\n\r\n converterValorDecimalMil(campo: string, casas: number = 2): string {\r\n if (!this.isEmpty(campo)) {\r\n //console.log('converterValorDecimal');\r\n //console.log('campo:', campo, ' replaced: ', campo.replace(',', '').replace('.', '')); \r\n if (campo == '-') {\r\n return campo;\r\n }\r\n\r\n let valor = parseFloat(campo.replace(',', '').replace('.', '').replace('.', '').replace('.', ''));\r\n\r\n if (isNaN(valor)) {\r\n return '';\r\n }\r\n\r\n let valordiv = parseInt(\"1\" + this.stringOfChar(\"0\", casas));\r\n //valor /= 100; \r\n console.log(valor, '/', valordiv);\r\n valor /= valordiv;\r\n console.log('=', valor);\r\n return this.decimalToStringMil(valor);\r\n /*\r\n var str = valor.toString().replace('.', ',');\r\n var aStr = str.split(',');\r\n if (aStr.length == 1) {\r\n //str += ',00';\r\n str += ',' + this.stringOfChar('0', casas);\r\n }\r\n else {\r\n //str += this.stringOfChar('0', 2 - aStr[1].length);\r\n str += this.stringOfChar('0', casas - aStr[1].length);\r\n }\r\n return str;\r\n */\r\n }\r\n else\r\n return campo;\r\n }\r\n\r\n decimalToStringMil(number?: any) {\r\n if (number != null) {\r\n if (number == 0 || number == '0') {\r\n return '0,00';\r\n }\r\n //console.log(number);\r\n let numero = number.toFixed(2).split('.');\r\n numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.');\r\n return numero.join(',').replace('-.', '-');\r\n } else\r\n return '';\r\n }\r\n\r\n stringOfChar(str: string, tam: number): string {\r\n var res = '';\r\n for (var i = 0; i < tam; i++) {\r\n res += str;\r\n }\r\n return res;\r\n }\r\n\r\n strToFloatZero(str: any): number {\r\n if (Number.isFinite(str))\r\n return str;\r\n if (this.isEmpty(str))\r\n return 0;\r\n else\r\n return parseFloat(str.replace('.', '').replace(',', '.'));\r\n }\r\n\r\n setFocus() {\r\n this.inputValorEdit.nativeElement.setFocus();\r\n }\r\n}\r\n\r\n","<!--\n<div [formGroup]=\"form\">\n-->\n<div [class]=\"{ 'input-text-padding': !classic }\">\n @if (classic) {\n <ion-item lines=\"none\" style=\"--background-focused: transparent;\" [class]=\"itemClass\"\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\n <ion-label position=\"{{ labelPosition }}\">{{ label }}\n @if (showObrigatorio) {\n <span class=\"label-tip-obrigatorio\">{{\n form?.get(formControlName)?.hasError('required') ? ' ●' : ''}}\n </span>\n }\n </ion-label>\n <!-- formControlName=\"{{ formControlName }}\" -->\n <ion-input #inputValor type=\"text\" [placeholder]=\"placeholder\" maxlength=\"{{ max }}\" (ionBlur)=\"onBlur()\"\n [value]=\"data\" (input)=\"writeValue(inputValor.value)\" (keypress)=\"digitarValor($event)\"\n [clearInput]=\"botaoLimpar\" [disabled]=\"readonly\"></ion-input>\n </ion-item>\n } @else {\n <ion-input #inputValor type=\"text\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\"\n [placeholder]=\"placeholder\" class=\"modern\" [maxlength]=\"max\" (ionBlur)=\"onBlur()\" [value]=\"data\"\n (input)=\"writeValue(inputValor.value)\" (keypress)=\"digitarValor($event)\" (ionInput)=\"onInputChange($event)\"\n mode=\"md\" [clearInput]=\"botaoLimpar\" [disabled]=\"readonly\">\n @if (icon || iconSrc) {\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\n }\n @if (showSeeCopy) {\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\n (click)=\"copiarClick()\">\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\n </ion-button>\n\n }\n\n </ion-input>\n }\n\n @if (form) {\n <div class=\"validation-errors\">\n @for (validation of validation_messages; track validation.type) {\n <ng-container>\n @if (form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\n form.get(formControlName)?.touched)) {\n <div class=\"error-message\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n </div>\n }\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonCheckbox } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-input-checkbox',\r\n imports: [IonCheckbox, IonItem, ],\r\n templateUrl: './input-checkbox.html',\r\n styleUrls: ['./input-checkbox.scss', './../baseInputComponent.scss'],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputCheckboxComponent,\r\n multi: true\r\n }]\r\n})\r\nexport class InputCheckboxComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n\r\n @Input() justify: string = \"start\";\r\n @Input() labelPlacement: string = \"end\";\r\n //control value acessor\r\n public data!: boolean | undefined;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n writeValue(value?: any): void {\r\n console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n constructor() {\r\n super();\r\n }\r\n\r\n \r\n\r\n override ngOnInit(): void {\r\n }\r\n}\r\n","<div [class]=\"{ 'input-text-padding': !classic }\">\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; padding-right: 0px; --background-hover: transparent\" [class]=\"itemClass\">\n <ion-checkbox #inputCheck\n [labelPlacement]=\"labelPlacement\" [justify]=\"justify\" \n [disabled]=\"readonly\"\n [checked]=\"data\"\n [color]=\"labelColor ?? 'primary'\" \n (ionChange)=\"writeValue(inputCheck.checked)\">\n <span [style.color]=\"labelColor ?? 'auto'\">{{ label }}</span> \n </ion-checkbox>\n </ion-item>\n</div>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonLabel, IonInput, IonIcon } from \"@ionic/angular\";\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'kb-input-format',\r\n imports: [IonIcon, IonInput, IonLabel, IonItem, NgClass],\r\n templateUrl: './input-format.html',\r\n styleUrls: ['./input-format.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputFormatComponent,\r\n multi: true\r\n }]\r\n})\r\nexport class InputFormatComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n\r\n @Input() formato: string | null = null;\r\n @Input() keyEnter = new EventEmitter();\r\n @Output() inputChange = new EventEmitter();\r\n @ViewChild('inputFormat', { read: ElementRef, static: true }) inputFormatEdit: any;\r\n\r\n //control value acessor\r\n public data: string | any = null;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n writeValue(value: string | any): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n override ngOnInit() { }\r\n\r\n digitarFormatado(event: any) {\r\n //console.log(event);\r\n const index = event.target.selectionStart >= 1 ? (event.target.selectionStart - 1) : 0;\r\n const keyAt = event.target.value.charCodeAt(index);\r\n if ((event.keyCode >= 48 && event.keyCode <= 57)\r\n || (keyAt >= 48 && keyAt <= 57)\r\n || (event.keyCode >= 96 && event.keyCode <= 105)\r\n || (event.keyCode == 8)\r\n || (event.keyCode == 9)\r\n || (event.keyCode == 39)\r\n || (event.keyCode == 37)\r\n || (event.keyCode == 46)) {\r\n\r\n //console.log(this.formControlName, this.form.get(this.formControlName).value);\r\n\r\n setTimeout(() => {\r\n if (this.form) {\r\n this.form.patchValue({\r\n [this.formControlName]: this.formataCampoValor(this.form.get(this.formControlName)?.value, this.formato ?? '', event)\r\n });\r\n } else {\r\n this.data = this.formataCampoValor(this.data ?? '', this.formato ?? '', event);\r\n this.writeValue(this.data);\r\n }\r\n }, 100);\r\n\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n this.inputChange.emit(valor);\r\n }\r\n\r\n\r\n onKeyEnter() {\r\n if (this.keyEnter != null) {\r\n this.keyEnter.emit();\r\n }\r\n }\r\n\r\n onBlur() {\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n if (this.blur) {\r\n this.blur.emit(this.blurArgs);\r\n }\r\n }\r\n\r\n setFocus() {\r\n this.inputFormatEdit.nativeElement.setFocus();\r\n }\r\n\r\n formataCampoValor(valor: string, Mascara: string, evento: any) {\r\n console.log(valor);\r\n if (!valor)\r\n return null;\r\n //console.log(evento);\r\n\r\n //if (!this.keypressInteiro(evento))\r\n // return;\r\n\r\n var boleanoMascara;\r\n\r\n var Digitato = evento != null ? evento.keyCode : 0;\r\n let exp = /\\-|\\.|\\/|\\(|\\)| /g\r\n let campoSoNumeros = valor.replace(exp, \"\");\r\n\r\n var posicaoCampo = 0;\r\n var NovoValorCampo = \"\";\r\n var TamanhoMascara = campoSoNumeros.length;;\r\n\r\n if (Digitato != 8) { // backspace \r\n for (let i = 0; i <= TamanhoMascara; i++) {\r\n boleanoMascara = ((Mascara.charAt(i) == \"-\") || (Mascara.charAt(i) == \".\")\r\n || (Mascara.charAt(i) == \"/\"))\r\n boleanoMascara = boleanoMascara || ((Mascara.charAt(i) == \"(\")\r\n || (Mascara.charAt(i) == \")\") || (Mascara.charAt(i) == \" \"))\r\n if (boleanoMascara) {\r\n NovoValorCampo += Mascara.charAt(i);\r\n TamanhoMascara++;\r\n } else {\r\n NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);\r\n posicaoCampo++;\r\n }\r\n }\r\n return NovoValorCampo;\r\n } else {\r\n return valor;\r\n }\r\n }\r\n}\r\n\r\n","<!--\n<div [formGroup]=\"form\">\n-->\n<!--comando --inner-padding-end: utilizado pra remover padding desnecessários-->\n<div [class]=\"{ 'input-text-padding': !classic }\">\n @if (classic) {\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\"\n [class]=\"itemClass + ' classic'\"\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\n <ion-label [position]=\"labelPosition\">{{ label }}\n @if (showObrigatorio) {\n <span class=\"label-tip-obrigatorio\">{{\n form?.get(formControlName)?.hasError('required') ? ' ●' : ''}}\n </span>\n }\n </ion-label>\n <!-- formControlName={{formControlName}} -->\n <ion-input #inputFormat type=\"tel\" [placeholder]=\"placeholder\" maxlength=\"{{ max }}\"\n (keydown)=\"digitarFormatado($event)\" (keyup.enter)=\"onKeyEnter()\" (ionBlur)=\"onBlur()\" [value]=\"data\"\n (input)=\"writeValue(inputFormat.value)\" [disabled]=\"readonly\"></ion-input>\n\n </ion-item>\n } @else {\n <ion-input #inputFormat type=\"tel\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\" \n [placeholder]=\"placeholder\" class=\"modern\" maxlength=\"{{ max }}\" \n [value]=\"data\" mode=\"md\"\n (input)=\"writeValue(inputFormat.value)\" \n (ionInput)=\"onInputChange($event)\" \n (ionBlur)=\"onBlur()\" \n (keydown)=\"digitarFormatado($event)\"\n (keyup.enter)=\"onKeyEnter()\" \n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake-modern' : '' \"\n [disabled]=\"readonly\" [shape]=\"shape\">\n\n @if (icon || iconSrc) {\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\n }\n </ion-input>\n\n }\n\n @if (form) {\n <div class=\"validation-errors\">\n @for (validation of validation_messages; track validation.type) {\n <ng-container>\n @if (form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\n form.get(formControlName)?.touched)) {\n <div class=\"error-message\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n </div>\n }\n</div>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output, Renderer2, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { IonItem, IonLabel, IonButton, IonIcon, IonSelect, IonSelectOption } from \"@ionic/angular\";\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'kb-input-select',\r\n imports: [IonIcon, IonButton, IonLabel, IonItem, IonSelect, IonSelectOption, NgClass],\r\n templateUrl: './input-select.html',\r\n styleUrls: ['./input-select.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputSelectComponent,\r\n multi: true,\r\n }\r\n ]\r\n})\r\nexport class InputSelectComponent extends BaseInputComponent\r\n implements OnInit, ControlValueAccessor {\r\n\r\n @Output() selectChange = new EventEmitter(); //: Function;\r\n @Output() selectChangeEntity = new EventEmitter(); //: Function;\r\n @Input() itens: any[] = [];\r\n @Input() itemId: string = \"Id\";\r\n @Input() itemNome: string = \"Nome\";\r\n @Input() showNovo: boolean = false;\r\n @Input() itemNull: boolean = true;\r\n @Input() opcaoDefault: string = 'Selecionar';\r\n @Input() interface: 'action-sheet' | 'popover' | 'alert' = 'popover';\r\n\r\n @ViewChild(\"itemSelect\", { read: ElementRef }) itemSelect: any;\r\n @ViewChild(\"inputSelect\", { read: ElementRef }) inputSelect: any;\r\n\r\n\r\n //control value acessor\r\n public data!: string;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n\r\n writeValue(value: string | any | null): void {\r\n //console.log('write value select', value, this.itens, value == null);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n\r\n constructor(private renderer: Renderer2 \r\n ) {\r\n super();\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n }\r\n\r\n onSelectChange(value: any) {\r\n console.log('select change', value);\r\n this.writeValue(value == '' ? null : value);\r\n if (this.selectChange != null) {\r\n //console.log('emit', value);\r\n this.selectChange.emit(value);\r\n }\r\n if (this.selectChangeEntity != null) {\r\n const existe = this.itens.find(i => i[this.itemId] == value);\r\n this.selectChangeEntity.emit(existe);\r\n }\r\n }\r\n\r\n onBlur() {\r\n //console.log('input select blur')\r\n //document.getElementById(\"item-select\").classList.remove(\"item-has-focus\");\r\n setTimeout(() => {\r\n //this.renderer.addClass(document.getElementById(\"item-select\"), \"item-has-focus\");\r\n this.renderer.removeClass(this.itemSelect.nativeElement, \"item-has-focus\");\r\n //console.log('select focused', document.getElementById(\"item-select\"));\r\n }, 200);\r\n\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n }\r\n\r\n entered() {\r\n //adicionar classe ao ion-item, não funcionou\r\n // console.log('select focused');\r\n setTimeout(() => {\r\n //this.renderer.addClass(document.getElementById(\"item-select\"), \"item-has-focus\");\r\n this.renderer.addClass(this.itemSelect.nativeElement, \"item-has-focus\");\r\n //console.log('select focused', document.getElementById(\"item-select\"));\r\n }, 200);\r\n\r\n }\r\n\r\n copiarClick() {\r\n try {\r\n console.log(this.inputSelect);\r\n const text = this.inputSelect.nativeElement.options[this.inputSelect.nativeElement.selectedIndex].text;\r\n console.log(text);\r\n navigator.clipboard.writeText(text);\r\n //this.utils.showToast('Copiado')\r\n } catch {\r\n\r\n }\r\n }\r\n}\r\n\r\n","<!--\n<div [formGroup]=\"form\">\n [style.opacity]=\"readonly ? 0.5 : 1\"\n [color]=\"labelColor\"\n-->\n<div [class]=\"{ 'input-text-padding': !classic }\">\n @if(classic) {\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent;\"\n [class]=\"itemClass + ' classic'\" id=\"item-select\" #itemSelect\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\n @if (label) {\n <ion-label style=\"color: var(--input-label-color);\" [position]=\"labelPosition\" class=\"label-color\">{{ label\n }}</ion-label>\n }\n <!-- formControlName=\"{{ formControlName }}\" -->\n <select [tabindex]=\"tabindex\" #inputSelect\n style=\"background-color: var(--input-color); color: var(--input-text-color); width: 100%;\"\n (change)=\"onSelectChange(inputSelect.value)\" (blur)=\"onBlur()\" [disabled]=\"readonly\" (focus)=\"entered()\">\n @if (itemNull) {\n <option [value]=\"''\" selected=\"true\">{{ opcaoDefault }}</option>\n }\n @for(item of itens; track item[itemId]) {\n <option [value]=\"item[itemId]\" [selected]=\"item[itemId] == data\">{{ item[itemNome] }}\n </option>\n }\n </select>\n @if(showSeeCopy) {\n <ion-button size=\"small\" slot=\"end\" style=\"margin-top: 27px; margin-inline-start: 4px !important;\" fill=\"clear\"\n color=\"dark\" (click)=\"copiarClick()\" [disabled]=\"!data\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n }\n </ion-item>\n } @else {\n\n <ion-select aria-label=\"Fruit\" [interface]=\"interface\" [placeholder]=\"placeholder\" [fill]=\"fill\"\n [labelPlacement]=\"labelPosition\" [label]=\"label\" [disabled]=\"readonly\" [value]=\"data\" [mode]=\"mode\"\n (ionChange)=\"onSelectChange($event.detail.value)\">\n @if (icon) {\n <ion-icon slot=\"start\" [icon]=\"icon\" aria-hidden=\"true\"></ion-icon>\n }\n @if (itemNull) {\n <ion-select-option [value]=\"''\" selected=\"true\">{{ opcaoDefault }}</ion-select-option>\n }\n @for(item of itens; track item[itemId]) {\n <ion-select-option [value]=\"item[itemId]\">{{ item[itemNome] }}\n </ion-select-option>\n }\n @if (showSeeCopy) {\n <ion-button fill=\"clear\" slot=\"end\" (click)=\"copiarClick()\">\n <ion-icon slot=\"icon-only\" name=\"copy-outline\" aria-hidden=\"true\"></ion-icon>\n </ion-button>\n }\n </ion-select>\n\n\n }\n\n @if (form) {\n <div class=\"validation-errors\">\n @for(validation of validation_messages; track validation.type) {\n <ng-container>\n @if(form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\n form.get(formControlName)?.touched)) {\n <div class=\"error-message\" [ngClass]=\"validationClass\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n </div>\n }\n</div>","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonRadioGroup, IonRow, IonCol, IonRadio } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-input-radio',\r\n imports: [IonRadio, IonCol, IonRow, IonRadioGroup, IonItem, ],\r\n templateUrl: './input-radio.html',\r\n styleUrls: ['./input-radio.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputRadioComponent,\r\n multi: true\r\n }]\r\n})\r\nexport class InputRadioComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n /**\r\n * Array de objetos { itemId, itemNome }\r\n */\r\n @Input() itens: any[] = [];\r\n @Input() itemId: string = \"Id\";\r\n @Input() itemNome: string = \"Nome\";\r\n @Input() color: string = \"primary\";\r\n //control value acessor\r\n public data!: string | undefined;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n writeValue(value?: any): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n constructor() {\r\n super();\r\n }\r\n\r\n override ngOnInit(): void {\r\n }\r\n\r\n\r\n}\r\n\r\n","<div>\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; padding-right: 0px;\" [class]=\"itemClass\"\n [style.opacity]=\"readonly ? '0.5' : '1'\">\n <ion-radio-group #inputRadio \n [value]=\"data\"\n (ionChange)=\"writeValue(inputRadio.value)\">\n <span style=\"font-size: 13px\">\n {{ label }}\n </span>\n <ion-row>\n <ion-col *ngFor=\"let item of itens\">\n <ion-radio style=\"margin-right: 12px;\" [color]=\"color\" \n labelPlacement=\"end\" \n justify=\"start\"\n [disabled]=\"readonly\"\n [value]=\"item[itemId]\">\n {{ item[itemNome] }}</ion-radio><br />\n </ion-col>\n </ion-row>\n </ion-radio-group>\n </ion-item>\n</div>","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\r\nimport { IonRow, IonCol, IonLabel, IonButton, IonList, IonListHeader, IonIcon } from \"@ionic/angular\";\r\n//import { InputAreaComponent, InputCepComponent, InputCheckboxComponent, InputFormatComponent, InputPesquisaComponent, InputRadioComponent, InputSelectComponent, InputTextComponent, InputValorComponent } from '../public-api';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { InputPesquisaComponent } from '../input-pesquisa/input-pesquisa';\r\nimport { InputTextComponent } from '../input-text/input-text';\r\nimport { InputAreaComponent } from '../input-area/input-area';\r\nimport { InputCepComponent } from '../input-cep/input-cep';\r\nimport { InputValorComponent } from '../input-valor/input-valor';\r\nimport { InputCheckboxComponent } from '../input-checkbox/input-checkbox';\r\nimport { InputFormatComponent } from '../input-format/input-format';\r\nimport { InputSelectComponent } from '../input-select/input-select';\r\nimport { InputRadioComponent } from '../input-radio/input-radio';\r\nimport { BaseModel } from '../../lib/model/base-model';\r\nimport { HtmlRow } from '../../lib/model/html-row';\r\n\r\n@Component({\r\n selector: 'kb-entidade-edit',\r\n imports: [IonIcon, IonListHeader, IonList, IonButton, IonLabel, IonCol, IonRow, InputTextComponent, \r\n InputPesquisaComponent, InputAreaComponent, InputCepComponent, InputValorComponent, InputCheckboxComponent,\r\n InputFormatComponent, InputSelectComponent, InputRadioComponent,\r\n FormsModule, ReactiveFormsModule],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n templateUrl: './entity-edit.html',\r\n styleUrls: ['./entity-edit.scss'],\r\n})\r\nexport class EntityEditComponent<T extends BaseModel> implements OnInit{\r\n \r\n @Input() entidade!: T | null;\r\n //entidade: any;\r\n /**\r\n * Vai receber montado do base cadastro\r\n */\r\n @Input() campos: HtmlRow[] = [];\r\n @Input() entidadeForm!: FormGroup;\r\n @Input() validation_messages: any;\r\n @Input() itemClass: string = \"\";\r\n @Input() rowClass: string = \"\";\r\n @Input() showObrigatorio: boolean = false;\r\n\r\n ngOnInit(): void {\r\n \r\n }\r\n\r\n emptyHandler() {\r\n\r\n }\r\n}\r\n","<div>\n @if (campos && campos.length) {\n <form [formGroup]=\"entidadeForm\" style=\"width: 100%;\">\n\n @for (linha of campos; track linha.Linha) {\n <ion-row [class]=\"rowClass\">\n @for (campo of linha.Linha; track campo.Nome) {\n <ng-container>\n <!-- {{ campo.Nome }} {{ campo.Tipo }} -->\n\n <!-- [showCustomAction]=\"campo.InputAction ?? false\" [customActionIcon]=\"campo.InputActionIcon ?? 'search-outline'\" -->\n @if (campo.Tipo == 'input-text') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-text label=\"{{campo.Label ?? campo.Nome}}\"\n [placeholder]=\"campo.PlaceHolderVisivel ? (campo.PlaceHolder ? campo.PlaceHolder : (campo.Label ?? campo.Nome + '...')) : ''\" \n [form]=\"entidadeForm\"\n [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\"\n [type]=\"campo.TipoInput ?? 'text'\" [showSeePassword]=\"campo.TipoInput == 'password'\" \n (customActionClick)=\"campo.click ? campo.click($event) : emptyHandler()\" [itemClass]=\"itemClass\"\n [showObrigatorio]=\"showObrigatorio\">\n </kb-input-text>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-date') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-text label=\"{{campo.Label ?? campo.Nome}}\"\n [form]=\"entidadeForm\"\n [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\"\n type=\"date\" \n (customActionClick)=\"campo.click ? campo.click($event) : emptyHandler()\" [itemClass]=\"itemClass\"\n [showObrigatorio]=\"showObrigatorio\">\n </kb-input-text>\n </ion-col> \n } \n @else if (campo.Tipo == 'input-number') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-text label=\"{{campo.Label ?? campo.Nome}}\"\n [placeholder]=\"campo.PlaceHolderVisivel ? (campo.PlaceHolder ? campo.PlaceHolder : (campo.Label ?? campo.Nome + '...')) : ''\" \n [form]=\"entidadeForm\"\n [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\"\n type=\"number\" \n (customActionClick)=\"campo.click ? campo.click($event) : emptyHandler()\" [itemClass]=\"itemClass\"\n [showObrigatorio]=\"showObrigatorio\">\n </kb-input-text>\n </ion-col>\n \n }\n @else if (campo.Tipo == 'input-area') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-area label=\"{{campo.Label ?? campo.Nome}}\"\n [placeholder]=\"campo.PlaceHolderVisivel ? (campo.PlaceHolder ? campo.PlaceHolder : (campo.Label ?? campo.Nome + '...')) : ''\" \n [form]=\"entidadeForm\"\n [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\"\n [linhas]=\"campo.Linhas ?? 5\" [itemClass]=\"itemClass\" [showObrigatorio]=\"showObrigatorio\">\n </kb-input-area>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-cep') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-cep label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\" [itemClass]=\"itemClass\"\n [showObrigatorio]=\"showObrigatorio\" (getResultados)=\"campo.change ? campo.change($event) : emptyHandler()\">\n </kb-input-cep>\n </ion-col>\n }\n @else if(campo.Tipo == 'input-valor') {\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"\" [hidden]=\"campo.Hidden === true\">\n <kb-input-valor label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\" [itemClass]=\"itemClass\"\n [showObrigatorio]=\"showObrigatorio\">\n </kb-input-valor>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-checkbox') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-checkbox label=\"{{ campo.Label }}\" [form]=\"entidadeForm\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\" [itemClass]=\"itemClass\"\n [labelColor]=\"campo.BtnColor ?? 'dark'\">\n\n </kb-input-checkbox>\n </ion-col>\n }\n @else if(campo.Tipo == 'input-format') {\n\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-format label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\" [formato]=\"campo.Formato ?? ''\"\n [itemClass]=\"itemClass\" [showObrigatorio]=\"showObrigatorio\">\n </kb-input-format>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-select') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-select [label]=\"campo.Label ?? campo.Nome\" [placeholder]=\"'Selecionar...'\"\n [formControlName]=\"campo.Nome\" [form]=\"entidadeForm\" [itens]=\"campo.Itens!\" [itemId]=\"campo.ItemId ?? 'Id'\"\n [itemNome]=\"campo.ItemNome ?? 'Nome'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n (selectChangeEntity)=\"campo.change ? campo.change($event) : emptyHandler()\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\" [showObrigatorio]=\"showObrigatorio\">\n </kb-input-select>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-radio') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-radio [label]=\"campo.Label ?? campo.Nome\" [formControlName]=\"campo.Nome\" [form]=\"entidadeForm\"\n [itens]=\"campo.Itens!\" [itemId]=\"campo.ItemId ?? 'Id'\" [itemNome]=\"campo.ItemNome ?? 'Nome'\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\">\n </kb-input-radio>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-pesquisa') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-pesquisa #pesquisaCentroCustoPai [label]=\"campo.Label ?? campo.Nome\" [campoId]=\"campo.ItemId ?? 'Id'\"\n [focusField]=\"campo.focusField ?? false\" [formControlName]=\"campo.Nome\" \n [placeholder]=\"campo.PlaceHolderVisivel ? (campo.PlaceHolder ? campo.PlaceHolder : ('Pesquisar...')) : ''\"\n [campoDisplay]=\"campo.ItemNome ?? 'Nome'\" [form]=\"entidadeForm\" [tipo]=\"campo.TipoPesquisa ?? ''\"\n [urlItem]=\"campo.UrlItem ?? ''\" [max]=\"campo.Tamanho ?? '50'\" [url]=\"campo.UrlPesquisa ?? ''\"\n [readonly]=\"campo.ReadOnly\" (pesquisaChange)=\"campo.change ? campo.change($event) : emptyHandler()\"\n [itemClass]=\"itemClass\" [showObrigatorio]=\"showObrigatorio\">\n </kb-input-pesquisa>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-button') {\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"\">\n <!-- \n <kb-btn-action [title]=\"campo.Label\" [icon]=\"campo.Icon\" [iconSrc]=\"campo.IconSrc\" [color]=\"campo.BtnColor ?? 'light'\" \n [expand]=\"campo.BtnExpand ?? 'block'\" style=\"margin-top: var(--btn-action-margin-top, auto);\">\n </kb-btn-action>\n -->\n <ion-button [expand]=\"campo.BtnExpand ?? 'block'\" [color]=\"campo.BtnColor ?? 'light'\"\n (click)=\"campo.click ? campo.click($event) : emptyHandler()\" [size]=\"campo.BtnSize ?? 'default'\"\n [disabled]=\"campo.ReadOnly\">\n <ion-icon *ngIf=\"campo.Icon || campo.IconSrc\" [name]=\"campo.Icon\" [src]=\"campo.IconSrc\"></ion-icon>\n {{ campo.Label }}\n </ion-button>\n </ion-col>\n }\n @else if (campo.Tipo == 'col') {\n <ion-col *ngIf=\"campo.Tipo == 'col'\" size-md=\"1\" size-xs=\"0\">\n\n </ion-col>\n }\n @else if (campo.Tipo == 'sub-titulo') {\n <ion-col *ngIf=\"\" size=\"12\">\n <ion-list lines=\"none\" class=\"ion-no-padding\">\n <ion-list-header color=\"primary\" [style]=\"campo.CampoStyle ?? ''\">\n <ion-label [style]=\"campo.LabelStyle ?? ''\">{{ campo.Label }}</ion-label>\n </ion-list-header>\n </ion-list>\n </ion-col>\n }\n </ng-container>\n }\n </ion-row>\n }\n <!--\n <ion-col class=\"select ion-no-margin ion-no-padding\">\n <ion-item lines=\"none\">\n <ion-label>Totalizador</ion-label>\n <ion-checkbox slot=\"start\" formControlName=\"Totalizador\"></ion-checkbox>\n </ion-item>\n </ion-col>\n <ion-col class=\"select ion-no-margin ion-no-padding\">\n <ion-item lines=\"none\">\n <ion-label>Inativo</ion-label>\n <ion-checkbox slot=\"start\" formControlName=\"Inativo\"></ion-checkbox>\n </ion-item>\n </ion-col>\n -->\n </form>\n }\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { IonRow, IonCol, IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DatePipe, DecimalPipe } from '@angular/common';\r\nimport { GridColuna, GridTabela } from '../../lib/model/grid-tabela';\r\nimport { LibService } from '../../lib/services/lib.service';\r\nimport { SafeHtmlPipe } from '../../lib/pipes/safe-html.pipe';\r\n\r\n@Component({\r\n selector: 'kb-grid-view',\r\n imports: [IonIcon, IonButton, IonCol, IonRow, FormsModule, DatePipe, DecimalPipe, SafeHtmlPipe],\r\n templateUrl: './grid-view.html',\r\n styleUrl: './grid-view.scss',\r\n changeDetection: ChangeDetectionStrategy.Eager\r\n})\r\nexport class GridViewComponent implements OnInit, OnChanges {\r\n @Input() tabelaCampos!: GridTabela;\r\n @Input() dataSet: any[] = [];\r\n @Input() minHeight: string = '400px';\r\n @Input() maxHeight: string = '600px';\r\n @Input() inMemoryPagination: boolean = false;\r\n @Input() apiPagination: boolean = false;\r\n\r\n @Input() filteredDataSet: any[] = [];\r\n\r\n @Output() selecionarItem = new EventEmitter();\r\n @Output() excluirItem = new EventEmitter();\r\n @Output() selecionarChecked = new EventEmitter();\r\n\r\n selectedItem: any;\r\n //inputs = inject(new InjectionToken<any>('title inputs'));\r\n grupos: any[] = [{ Coluna: '', Tabela: null, Dados: null, Nivel: 0 }];\r\n\r\n // tabelaCampos = {\r\n // Selecionar: false,\r\n // Exportar: true,\r\n // Colunas: [\r\n // { Campo: 'Id', Titulo: 'Id', Tamanho: '10%', Ordem: true, Grupo: false, Filtrar: true, OrdemStatus: 0, Tipo: 'number', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },\r\n // { Campo: 'Marca', Titulo: 'Marca', Tamanho: '25%', Ordem: true, Grupo: true, Filtrar: true, OrdemStatus: 0, Tipo: 'string', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },\r\n // { Campo: 'Descricao', Titulo: 'Descrição', Tamanho: '25%', Ordem: true, Grupo: true, Filtrar: true, OrdemStatus: 0, Tipo: 'string', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },\r\n // { Campo: 'Data', Titulo: 'Data', Tamanho: '20%', Ordem: true, Grupo: true, Filtrar: true, OrdemStatus: 0, Tipo: 'date', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },\r\n // { Campo: 'Valor', Titulo: 'Valor', Tamanho: '20%', Ordem: true, Grupo: false, Filtrar: true, OrdemStatus: 0, Tipo: 'number', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },\r\n // ]\r\n // }\r\n\r\n // dataSet: Array<any> = [\r\n // { Id: 1, Marca: 'Apple', Descricao: 'IPhone 14', Data: '2023-05-01', Valor: 7899.99 },\r\n // { Id: 2, Marca: 'Apple', Descricao: 'MacBook Pro', Data: '2023-06-01', Valor: 17999.99 },\r\n // { Id: 3, Marca: 'Samsung', Descricao: 'Galaxy S23', Data: '2023-05-01', Valor: 6899.99 },\r\n // { Id: 4, Marca: 'Sony', Descricao: 'PS 5', Data: '2023-06-01', Valor: 4899.99 },\r\n // { Id: 5, Marca: 'Samsung', Descricao: 'Watch 23', Data: '2023-05-01', Valor: 1899.99 },\r\n // ]\r\n\r\n\r\n\r\n groups: string[] = []\r\n pageDataSet: any[] = [];\r\n\r\n\r\n //array com os campos filtrados para display\r\n camposDisplay: any[] = [];\r\n\r\n //filtro\r\n isFiltroOpen: boolean = false;\r\n selectedColuna: any;\r\n todosSelecionados: boolean = false;\r\n\r\n //pagination\r\n //página atual\r\n page: number = 1;\r\n //registros por página\r\n @Input() pageOffset: number = 20;\r\n @Input() apiTotalRecords: number = 0;\r\n @Input() apiPage: number = 1;\r\n @Input() apiPagesTotal: number = 1;\r\n @Output() apiProximoEvent = new EventEmitter();\r\n @Output() apiAnteriorEvent = new EventEmitter();\r\n\r\n //total de registros\r\n totalRec: number = 0;\r\n //total de páginas\r\n totalPages: number = 0;\r\n //indexador de paginas\r\n pages: number[] = [];\r\n start: number = 1;\r\n\r\n\r\n constructor() { }\r\n\r\n valoresFiltro() {\r\n this.tabelaCampos.Colunas.forEach(c => {\r\n if (c.Filtrar) {\r\n //projetar a coluna\r\n let initial = [];\r\n let valores = this.dataSet.map(d => d[c.Campo]);\r\n c.Valores = valores.filter((value, index, self) => {\r\n return self.indexOf(value) === index;\r\n }).map(v => { return { Selecionado: false, Valor: v } });\r\n // console.log(c.Campo, valores);\r\n // console.log(c.Valores)\r\n }\r\n })\r\n }\r\n\r\n ngOnInit() {\r\n\r\n\r\n //this.inicializaGrupo();\r\n //this.agrupar('Marca');\r\n //console.log('inputs', this.inputs);\r\n //console.log('Input empresa', this.empresaId);\r\n GridTabela.init(this.tabelaCampos);\r\n this.valoresFiltro();\r\n this.filteredDataSet = this.dataSet;\r\n console.log('Init Tabela campos', this.tabelaCampos);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n console.log('On changes Tabela campos', this.tabelaCampos);\r\n //evento chamado quando o dataset for atualizado\r\n //inicializar vars de paginação\r\n this.initPage();\r\n this.todosSelecionados = false;\r\n }\r\n\r\n initPage() {\r\n if (this.apiPagination) {\r\n this.page = this.apiPage;\r\n this.totalRec = this.apiTotalRecords;\r\n this.totalPages = Math.ceil(this.totalRec / this.pageOffset);\r\n this.start = (this.page - 1) * this.pageOffset;\r\n this.gerarArrayPags();\r\n } else {\r\n this.page = 1;\r\n this.totalRec = this.filteredDataSet.length;\r\n this.totalPages = Math.ceil(this.totalRec / this.pageOffset);\r\n }\r\n\r\n if (this.inMemoryPagination === true) {\r\n this.getRegistrosPage();\r\n } else {\r\n this.pageDataSet = this.filteredDataSet;\r\n }\r\n }\r\n\r\n getRegistrosPage() {\r\n this.start = (this.page - 1) * this.pageOffset;\r\n console.log('dataset', this.filteredDataSet);\r\n console.log('start', this.start);\r\n console.log('offset', this.pageOffset);\r\n this.pageDataSet = this.filteredDataSet.slice(this.start, (this.start + this.pageOffset));\r\n console.log('page dataset', this.pageDataSet);\r\n }\r\n\r\n //in mempory pagination\r\n proximo() {\r\n if (this.page < this.totalPages) {\r\n this.page++;\r\n this.getRegistrosPage();\r\n this.gerarArrayPags();\r\n }\r\n }\r\n\r\n anterior() {\r\n if (this.page > 1) {\r\n this.page--;\r\n this.getRegistrosPage();\r\n this.gerarArrayPags();\r\n }\r\n }\r\n //\r\n proximoApi(proximo: boolean, page: number = 0) {\r\n //setar as var de controle com as var da api\r\n this.page = this.apiPage;\r\n this.totalRec = this.apiTotalRecords;\r\n\r\n this.apiProximoEvent.emit({ proximo: proximo, page: page });\r\n }\r\n\r\n gerarArrayPags() {\r\n if (this.totalRec <= 0) {\r\n this.pages = [];\r\n return;\r\n }\r\n if (this.page > 3 && this.page <= (this.totalPages)) {\r\n this.pages = [];\r\n for (let i = this.page - 2; (i <= this.page + 2) && i <= this.totalPages; i++) {\r\n this.pages.push(i);\r\n }\r\n return;\r\n }\r\n\r\n console.log('array pags:', this.page, this.totalRec);\r\n if (this.page % 5 == 0) {\r\n console.log('mod = 0', this.page % 5);\r\n this.pages = [];\r\n //atingiu o proximo grupo 1, 6, 11, 16 \r\n for (let i = this.page - 4; (i <= this.page) && i <= this.totalPages; i++) {\r\n this.pages.push(i);\r\n }\r\n } else if (this.page % 5 == 1) {\r\n console.log('mod = 1', this.page % 5);\r\n this.pages = [];\r\n //atingiu o proximo grupo 1, 6, 11, 16 \r\n for (let i = this.page; (i < (this.page + 5)) && i <= this.totalPages; i++) {\r\n this.pages.push(i);\r\n }\r\n }\r\n }\r\n\r\n inicializaGrupo() {\r\n //inicializar o primeiro grupo 'default'\r\n this.camposDisplay = this.tabelaCampos.Colunas;\r\n this.grupos[0].Tabela = this.camposDisplay;\r\n this.grupos[0].Dados = this.dataSet;\r\n }\r\n\r\n agrupar(campo: string) {\r\n this.groups.push(campo);\r\n let level = 0;\r\n for (let g in this.groups) {\r\n console.log(g);\r\n //filtrar os dados\r\n let result = this.dataSet.reduce((group, data) => {\r\n const { g } = data;\r\n group[g] = group[campo] ?? [];\r\n group[g].push(data);\r\n return group;\r\n }, {});\r\n console.log(result);\r\n }\r\n\r\n }\r\n\r\n filtrarCampos(coluna = '') {\r\n if (coluna != '') {\r\n\r\n } else {\r\n\r\n }\r\n }\r\n\r\n filtrar(col: GridColuna) {\r\n //console.log('filtrar', col);\r\n if (col.Valores && col.Valores.find(v => v.Selecionado) != null) {\r\n const valores = col.Valores.filter(v => v.Selecionado).map(v => v.Valor);\r\n\r\n //filtrar por valores selecionados\r\n this.filteredDataSet = this.dataSet.filter(d => valores.indexOf(d[col.Campo]) > -1);\r\n } else if (col.FiltroOperador && col.FiltroValor) {\r\n //console.log(col.FiltroOperador, col.FiltroValor)\r\n try {\r\n this.filteredDataSet = this.dataSet.filter(d => {\r\n switch (col.FiltroOperador) {\r\n case \"=\":\r\n return d[col.Campo] == col.FiltroValor;\r\n case \">=\":\r\n if (col.Tipo == 'number') {\r\n return LibService.stringToDecimal(d[col.Campo], true) >= LibService.stringToDecimal(col.FiltroValor ?? '', true);\r\n } else if (col.Tipo == 'data') {\r\n return new Date(this.dataToString(d[col.Campo])) >= new Date(this.dataToString(col.FiltroValor ?? ''));\r\n } else\r\n return d[col.Campo] >= (col.FiltroValor ?? '');\r\n case \"<=\":\r\n if (col.Tipo == 'number') {\r\n return LibService.stringToDecimal(d[col.Campo], true) <= LibService.stringToDecimal(col.FiltroValor ?? '', true);\r\n } else\r\n return d[col.Campo] <= (col.FiltroValor ?? '');\r\n case \"tem\":\r\n return d[col.Campo].toString().toLowerCase().indexOf((col.FiltroValor ?? '').toLowerCase()) > -1;\r\n default:\r\n return true;\r\n }\r\n\r\n });\r\n } catch (ex) {\r\n console.log(ex);\r\n this.filteredDataSet = this.dataSet;\r\n }\r\n }\r\n col.FiltroVisivel = false;\r\n\r\n this.initPage();\r\n }\r\n\r\n getPage() {\r\n\r\n }\r\n\r\n limpar(col: GridColuna) {\r\n console.log(this.dataSet.length);\r\n this.filteredDataSet = this.dataSet;\r\n col.FiltroVisivel = false;\r\n this.initPage();\r\n }\r\n\r\n dataToString(data: string): string {\r\n if (data) {\r\n return data.split('/').reverse().join('-');\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n ordenar(col: GridColuna) {\r\n if (col.OrdemStatus == 0 || col.OrdemStatus == -1) {\r\n if (col.Tipo == 'data') {\r\n this.filteredDataSet.sort((a, b) => this.dataToString(a[col.Campo]) > this.dataToString(b[col.Campo]) ? 1 : (this.dataToString(a[col.Campo]) < this.dataToString(b[col.Campo]) ? -1 : 0));\r\n } else if (col.Tipo == 'number') {\r\n this.filteredDataSet.sort((a, b) => LibService.stringToDecimal(a[col.Campo]) > LibService.stringToDecimal(b[col.Campo]) ? 1 : (LibService.stringToDecimal(a[col.Campo]) < LibService.stringToDecimal(b[col.Campo]) ? -1 : 0));\r\n } else\r\n this.filteredDataSet.sort((a, b) => a[col.Campo] > b[col.Campo] ? 1 : (a[col.Campo] < b[col.Campo] ? -1 : 0));\r\n col.OrdemStatus = 1; //asc\r\n } else {\r\n if (col.Tipo == 'data') {\r\n this.filteredDataSet.sort((a, b) => this.dataToString(a[col.Campo]) < this.dataToString(b[col.Campo]) ? 1 : (this.dataToString(a[col.Campo]) > this.dataToString(b[col.Campo]) ? -1 : 0));\r\n } else if (col.Tipo == 'number') {\r\n this.filteredDataSet.sort((a, b) => LibService.stringToDecimal(a[col.Campo], true) < LibService.stringToDecimal(b[col.Campo], true) ? 1 : (LibService.stringToDecimal(a[col.Campo], true) > LibService.stringToDecimal(b[col.Campo], true) ? -1 : 0));\r\n } else\r\n this.filteredDataSet.sort((a, b) => a[col.Campo] < b[col.Campo] ? 1 : (a[col.Campo] > b[col.Campo] ? -1 : 0));\r\n col.OrdemStatus = -1; //desc\r\n }\r\n }\r\n\r\n setFiltroOpen(col: any) {\r\n col.FiltroVisivel = !col.FiltroVisivel\r\n if (col.FiltroVisivel) {\r\n this.selectedColuna = col;\r\n //console.log(this.selectedColuna);\r\n }\r\n }\r\n\r\n selecionarTodos() {\r\n //this.todosSelecionados = !this.todosSelecionados;\r\n if (this.tabelaCampos.CampoSelecionar) {\r\n this.filteredDataSet.forEach(item => {\r\n item[this.tabelaCampos.CampoSelecionar ?? 'Selecionado'] = this.todosSelecionados;\r\n });\r\n }\r\n this.selecionarChecked.emit();\r\n }\r\n\r\n selecionarLinha(item: any) {\r\n this.selecionarItem.emit(item);\r\n this.selectedItem = item;\r\n }\r\n\r\n excluirLinha(item: any) {\r\n this.excluirItem.emit(item);\r\n }\r\n\r\n //check\r\n selecionadoChecked() {\r\n this.selecionarChecked.emit();\r\n }\r\n}\r\n\r\n","<div style=\"font-size: 14px;\">\n <div id=\"painelExportacao\">\n @if(inMemoryPagination || apiPagination) {\n <ion-row>\n <!--\n <ion-col size=\"2\">\n <ion-button *ngIf=\"tabelaCampos.Selecionar === true\" size=\"small\" fill=\"outline\" color=\"medium\"\n (click)=\"selecionarTodos()\">Selecionar Todos</ion-button>\n </ion-col>\n -->\n <ion-col size-md=\"5\" size-xs=\"12\">\n @if (inMemoryPagination === true) {\n <ion-button size=\"small\" fill=\"outline\" color=\"bluetool\" (click)=\"anterior()\">\n <ion-icon name=\"chevron-back-outline\" slot=\"start\"></ion-icon>\n Anterior\n </ion-button>\n }\n @if (inMemoryPagination === true) {\n <ion-button size=\"small\" fill=\"outline\" color=\"bluetool\" (click)=\"proximo()\">\n Próximo\n <ion-icon name=\"chevron-forward-outline\" slot=\"end\"></ion-icon>\n </ion-button>\n }\n @if (apiPagination === true) {\n <ion-button size=\"small\" fill=\"outline\" color=\"medium\" shape=\"round\" class=\"circle-button\"\n (click)=\"proximoApi(false)\" alt=\"Primeiro\">\n <ion-icon name=\"chevron-back-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n @for (pag of pages; track pag) {\n <ion-button shape=\"round\" [fill]=\"pag == this.page ? 'solid' : 'outline'\" size=\"small\"\n class=\"circle-button\" [color]=\"pag == this.page ? 'verde' : 'medium'\"\n [class]=\"{ 'pageSelected': pag == this.page }\" (click)=\"proximoApi(false, pag)\">{{ pag\n }}</ion-button>\n }\n @if (apiPagination === true) {\n <ion-button size=\"small\" fill=\"outline\" color=\"medium\" shape=\"round\" class=\"circle-button\"\n (click)=\"proximoApi(true)\" alt=\"Último\">\n <ion-icon name=\"chevron-forward-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n\n </ion-col>\n <ion-col size-md=\"5\" size-xs=\"12\" style=\"text-align: left;\">\n @if ((inMemoryPagination || apiPagination) && totalRec > 0) {\n <span style=\"display: block; margin-top: 10px;\">Exibindo {{ start + 1 }} - {{ (start +\n pageOffset) < totalRec ? (start + pageOffset) : totalRec }} total de {{ totalRec }} </span>\n }\n </ion-col>\n </ion-row>\n }\n </div>\n <div style=\"width: 100%; margin-top: 16px; overflow-y: auto;\" [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\" class=\"scroll-container\">\n <table class=\"grid\">\n <thead>\n <tr style=\"background-color: var(--ion-color-bluetool); color: white;\">\n @if (tabelaCampos.Selecionar === true) {\n <td style=\"width: 3%; text-align: center;\">\n <input type=\"checkbox\" [(ngModel)]=\"todosSelecionados\" (change)=\"selecionarTodos()\">\n </td>\n }\n @for (col of tabelaCampos.Colunas; track col) {\n <td [style.width]=\"col.Tamanho\">\n <div style=\"position: relative;\">\n <div style=\"display: flex; justify-content: space-between; align-items: end;\">\n <strong>{{ col.Titulo }}</strong>\n <div>\n @if (col.Ordem) {\n <ion-icon slot=\"end\" (click)=\"ordenar(col)\" style=\"cursor: pointer;\"\n [name]=\"col.OrdemStatus == 0 ? 'swap-vertical' : (col.OrdemStatus == 1 ? 'arrow-up': 'arrow-down')\">\n </ion-icon>\n }\n @if (col.Filtrar) {\n <ion-icon name=\"funnel\" (click)=\"setFiltroOpen(col)\" slot=\"end\">\n </ion-icon>\n }\n </div>\n </div>\n\n\n <div class=\"caixaGrande\" [hidden]=\"!col.FiltroVisivel\" tabindex=\"-1\"\n style=\"color: black; display: block; position: absolute; z-index: 800; width: 210px; left: 0px; opacity: 0.9; background-color: white; max-height: 200px;\">\n Filtrar:\n <div>\n <div style=\"display: flex; justify-content: space-between; align-items: start;\">\n <select style=\"width: 80px;\" [(ngModel)]=\"col.FiltroOperador\">\n <option>=</option>\n <option>&gt;=</option>\n <option>&lt;=</option>\n <option>tem</option>\n </select>\n <input style=\"width: 100px;\" type=\"text\" [(ngModel)]=\"col.FiltroValor\">\n </div>\n <ion-button size=\"small\" color=\"medium\" expand=\"block\"\n (click)=\"filtrar(col)\">Filtrar</ion-button>\n <ion-button size=\"small\" color=\"light\" expand=\"block\"\n (click)=\"limpar(col)\">Limpar</ion-button>\n </div>\n @if (col.Valores) {\n <div class=\"scroll-container\" style=\"height: 200px; overflow-y: scroll;\">\n @for (valor of col.Valores; track valor) {\n <div>\n <input type=\"checkbox\" [(ngModel)]=\"valor.Selecionado\">\n <span>{{ valor.Valor }}</span>\n </div>\n }\n </div>\n }\n </div>\n\n </div>\n </td>\n }\n @if (tabelaCampos.Excluir === true) {\n <td>\n\n </td>\n }\n </tr>\n </thead>\n <tbody>\n @for(item of pageDataSet; track item) {\n <tr [class]=\"item == selectedItem ? 'item-selecionado' : '' \">\n @if (tabelaCampos.Selecionar === true) {\n <td style=\"text-align: center; cursor: auto;\">\n <input type=\"checkbox\" [(ngModel)]=\"item[tabelaCampos.CampoSelecionar ?? 'Selecionado']\"\n (change)=\"selecionadoChecked()\">\n </td>\n }\n @for (col of tabelaCampos.Colunas; track col.Campo) {\n <td class=\"col\" [style.width]=\"col.Tamanho\"\n [style.text-align]=\"col.Tipo == 'number' ? 'right' : (col.Alinhamento ?? 'left')\"\n (click)=\"col.ClickFunction ? col.ClickFunction(item) : selecionarLinha(item)\">\n @if (col.Pipe == 'date') {\n <span>{{ item[col.Campo] | date: 'dd/MM/yyyy' }}</span>\n }\n @if (col.Pipe == 'datetime') {\n <span>{{ item[col.Campo] | date: 'dd/MM/yyyy HH:mm:ss' }}</span>\n }\n @if (col.Pipe == 'valor') {\n <span>{{ item[col.Campo] | number }}</span>\n }\n @if(col.RenderFunction) {\n <span [innerHtml]=\"col.RenderFunction(item) | safeHtml\"></span>\n }\n @if (!col.Pipe && !col.RenderFunction) {\n <span>{{ item[col.Campo] ?? col.Default }}</span>\n }\n </td>\n }\n @if (tabelaCampos.Excluir === true) {\n <td style=\"padding: 0px; text-align: center;\">\n <ion-button size=\"small\" color=\"danger\" fill=\"outline\" style=\"transform: scale(0.85);\"\n (click)=\"excluirLinha(item)\">\n <ion-icon name=\"trash\"></ion-icon>\n </ion-button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <!--\n <ion-modal [isOpen]=\"isFiltroOpen\" (didDismiss)=\"isFiltroOpen = false;\">\n <ng-template>\n <ion-content class=\"ion-padding\">\n <div class=\"caixaGrande\">\n Filtrar:\n <div *ngIf=\"selectedColuna.Valores\">\n <div *ngFor=\"let valor of selectedColuna.Valores\">\n <span>{{ valor }}</span>\n </div>\n </div>\n </div>\n </ion-content>\n </ng-template>\n </ion-modal>\n -->\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { IonModal, IonContent, IonButton, IonIcon, IonRow, IonCol, IonInput, IonSelect, IonSelectOption } from \"@ionic/angular\";\r\nimport { Intervalo } from '../../lib/model/intervalo';\r\n\r\n@Component({\r\n selector: 'kb-periodo-intervalo',\r\n imports: [IonInput, IonCol, IonRow, IonIcon, IonButton, IonSelect, IonSelectOption ],\r\n templateUrl: './periodo-intervalo.html',\r\n styleUrl: './periodo-intervalo.scss',\r\n})\r\nexport class PeriodoIntervaloComponent implements OnInit {\r\n @Output() aceitarFunction = new EventEmitter();\r\n @Input() btnHeight = '2.1em';\r\n visible: boolean = false;\r\n intervaloValor: number = 1;\r\n intervaloTipo: string = 'dia';\r\n dias: Intervalo[] = [\r\n { valor: 1, selecionado: false, tipo: 'dia' },\r\n { valor: 2, selecionado: false, tipo: 'dia' },\r\n { valor: 3, selecionado: false, tipo: 'dia' },\r\n { valor: 4, selecionado: false, tipo: 'dia' },\r\n { valor: 5, selecionado: false, tipo: 'dia' },\r\n ];\r\n semanas: Intervalo[] = [\r\n { valor: 1, selecionado: false, tipo: 'sem' },\r\n { valor: 2, selecionado: false, tipo: 'sem' },\r\n { valor: 3, selecionado: false, tipo: 'sem' },\r\n { valor: 4, selecionado: false, tipo: 'sem' },\r\n //{ valor: 5, selecionado: false },\r\n ];\r\n meses: Intervalo[] = [\r\n { valor: 1, selecionado: false, tipo: 'mes' },\r\n { valor: 2, selecionado: false, tipo: 'mes' },\r\n { valor: 3, selecionado: false, tipo: 'mes' },\r\n { valor: 4, selecionado: false, tipo: 'mes' },\r\n { valor: 5, selecionado: false, tipo: 'mes' },\r\n //{ valor: 5, selecionado: false },\r\n ];\r\n selecionado: Intervalo | undefined;\r\n constructor() { }\r\n\r\n ngOnInit() { }\r\n\r\n selecionar(intervalo: Intervalo) {\r\n if (this.selecionado)\r\n this.selecionado.selecionado = !this.selecionado.selecionado;\r\n intervalo.selecionado = true;\r\n this.selecionado = intervalo;\r\n //binding de controles\r\n this.intervaloValor = intervalo.valor;\r\n this.intervaloTipo = intervalo.tipo;\r\n }\r\n\r\n setValor(value: any) {\r\n this.intervaloValor = value;\r\n }\r\n\r\n setTipo(value: string) {\r\n console.log(value);\r\n this.intervaloTipo = value;\r\n }\r\n\r\n aceitar() {\r\n console.log(this.intervaloValor, this.intervaloTipo);\r\n if (this.aceitarFunction) {\r\n this.aceitarFunction.emit({ valor: this.intervaloValor, tipo: this.intervaloTipo } as Intervalo);\r\n }\r\n this.visible = false;\r\n }\r\n\r\n}\r\n\r\n","<div>\n <ion-button id=\"btnPeriodo\" size=\"small\" color=\"medium\" fill=\"outline\" (click)=\"visible = !visible;\"\n [style.min-height]=\"btnHeight\">\n <ion-icon slot=\"start\" name=\"calendar\"></ion-icon>\n Período\n </ion-button>\n</div>\n<div [hidden]=\"!visible\" class=\"painel-intervalo\">\n <ion-row class=\"ion-align-items-center ion-justify-content-center\">\n <ion-col size=\"3\"><strong>Dias</strong></ion-col>\n <ion-col *ngFor=\"let dia of dias\" size=\"1.5\"\n [class]=\"dia.selecionado === true ? 'col-valor-selecionado' : 'col-valor'\" (click)=\"selecionar(dia)\">{{ dia.valor\n }}</ion-col>\n <!--\n <ion-col size=\"1.5\" class=\"col-valor\">2</ion-col>\n <ion-col size=\"1.5\" class=\"col-valor\">3</ion-col>\n <ion-col size=\"1.5\" class=\"col-valor\">4</ion-col>\n <ion-col size=\"1.5\" class=\"col-valor\">5</ion-col>\n -->\n </ion-row>\n <ion-row class=\"ion-align-items-center ion-justify-content-center\">\n <ion-col size=\"3\"><strong>Semanas</strong></ion-col>\n <ion-col *ngFor=\"let sem of semanas\" size=\"1.5\"\n [class]=\"sem.selecionado === true ? 'col-valor-selecionado' : 'col-valor'\" (click)=\"selecionar(sem)\">{{ sem.valor\n }}</ion-col>\n <ion-col></ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center ion-justify-content-center\">\n <ion-col size=\"3\"><strong>Mes</strong></ion-col>\n <ion-col *ngFor=\"let mes of meses\" size=\"1.5\"\n [class]=\"mes.selecionado === true ? 'col-valor-selecionado' : 'col-valor'\" (click)=\"selecionar(mes)\">{{ mes.valor\n }}</ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col>\n <ion-input #inputValor\n class=\"input-periodo\" \n type=\"number\" \n max=\"12\" \n (input)=\"setValor(inputValor.value)\" \n [value]=\"intervaloValor\"></ion-input>\n </ion-col>\n <ion-col>\n <ion-select #selectTipo\n class=\"input-periodo\" interface=\"popover\" \n [value]=\"intervaloTipo\"\n (ionChange)=\"setTipo(selectTipo.value)\"\n >\n <ion-select-option value=\"dia\">Dias</ion-select-option>\n <ion-select-option value=\"sem\">Semanas</ion-select-option>\n <ion-select-option value=\"mes\">Meses</ion-select-option>\n </ion-select>\n </ion-col>\n </ion-row>\n \n <ion-row class=\"ion-justify-content-end\">\n <ion-col style=\"text-align: end;\">\n <ion-button color=\"medium\" fill=\"outline\" (click)=\"visible=false;\">Cancelar</ion-button>\n <ion-button color=\"primary\" (click)=\"aceitar()\">Ok</ion-button>\n </ion-col>\n </ion-row>\n \n</div>\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { IonItem, IonLabel } from \"@ionic/angular\";\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport {\r\n ClassicEditor,\r\n AccessibilityHelp,\r\n Alignment,\r\n Autoformat,\r\n AutoImage,\r\n AutoLink,\r\n Autosave,\r\n BlockQuote,\r\n Bold,\r\n CloudServices,\r\n Code,\r\n CodeBlock,\r\n Essentials,\r\n FindAndReplace,\r\n FontBackgroundColor,\r\n FontColor,\r\n FontFamily,\r\n FontSize,\r\n GeneralHtmlSupport,\r\n Heading,\r\n Highlight,\r\n HorizontalLine,\r\n ImageBlock,\r\n ImageCaption,\r\n ImageInline,\r\n ImageInsertViaUrl,\r\n ImageResize,\r\n ImageStyle,\r\n ImageTextAlternative,\r\n ImageToolbar,\r\n ImageUpload,\r\n Indent,\r\n IndentBlock,\r\n Italic,\r\n Link,\r\n LinkImage,\r\n List,\r\n ListProperties,\r\n MediaEmbed,\r\n Paragraph,\r\n PasteFromOffice,\r\n RemoveFormat,\r\n SelectAll,\r\n SpecialCharacters,\r\n SpecialCharactersArrows,\r\n SpecialCharactersCurrency,\r\n SpecialCharactersEssentials,\r\n SpecialCharactersLatin,\r\n SpecialCharactersMathematical,\r\n SpecialCharactersText,\r\n Strikethrough,\r\n Style,\r\n Subscript,\r\n Superscript,\r\n Table,\r\n TableCaption,\r\n TableCellProperties,\r\n TableColumnResize,\r\n TableProperties,\r\n TableToolbar,\r\n TextTransformation,\r\n TodoList,\r\n Underline,\r\n Undo,\r\n type EditorConfig\r\n} from 'ckeditor5';\r\nimport { ChangeEvent, FocusEvent, CKEditorModule, BlurEvent } from '@ckeditor/ckeditor5-angular';\r\nimport { NgClass } from '@angular/common';\r\n\r\n\r\n@Component({\r\n selector: 'kb-input-html',\r\n imports: [IonLabel, IonItem, NgClass, CKEditorModule],\r\n templateUrl: './input-html.html',\r\n styleUrls: ['./input-html.scss', './../baseInputComponent.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputHtmlComponent,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputHtmlComponent extends BaseInputComponent\r\n implements OnInit, ControlValueAccessor, OnDestroy {\r\n //referência ao componente CKEditor\r\n public Editor: typeof ClassicEditor | null = null;\r\n //objeto de configuração do CKEditor\r\n public config: EditorConfig = {};\r\n @ViewChild(\"inputEmail\", { static: false }) inputEmail: any;\r\n //control value acessor\r\n public data!: string;\r\n private onChange: Function = (data: string) => { this.data = data };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n //@ViewChild(\"itemInput\", { read: ElementRef }) itemInput: any;\r\n\r\n constructor() {\r\n super();\r\n this.configurarCKEditor();\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n \r\n }\r\n\r\n /*\r\n public onChange( { editor }: ChangeEvent ) {\r\n\t\tconst data = editor.getData();\r\n\r\n\t\tconsole.log( data );\r\n\t}\r\n */\r\n\r\n //writeValue({ editor }: ChangeEvent): void {\r\n writeValue(data: string, atualizar: boolean = true): void {\r\n //Converte o valor corretamente de acordo com o tipo de input\r\n // if (!editor) {\r\n // return;\r\n // }\r\n //const texto = editor.getData();\r\n const texto = data;\r\n //console.log('write value', texto); \r\n this.onChange(texto);\r\n if (atualizar) {\r\n this.data = texto; \r\n } \r\n }\r\n\r\n blurEditor({ editor }: BlurEvent) {\r\n //console.log('blur', editor); \r\n }\r\n\r\n blurItem() {\r\n //console.log('blur', this.inputEmail); \r\n }\r\n\r\n // writeValue(): void {\r\n // //Converte o valor corretamente de acordo com o tipo de input\r\n // const value = this.Editor.getData();\r\n // console.log('write value', value);\r\n // this.onChange(value);\r\n // }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n\r\n }\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n }\r\n //para cores focus\r\n onBlur() {\r\n //console.log('input select blur')\r\n //document.getElementById(\"item-select\").classList.remove(\"item-has-focus\"); \r\n\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n }\r\n\r\n entered() {\r\n //adicionar classe ao ion-item, não funcionou\r\n //console.log('input focused');\r\n\r\n }\r\n\r\n //configuração do CKEditor\r\n private configurarCKEditor() {\r\n this.Editor = ClassicEditor;\r\n this.config = {\r\n toolbar: {\r\n items: [\r\n 'undo',\r\n 'redo',\r\n '|',\r\n 'findAndReplace',\r\n '|',\r\n 'heading',\r\n 'style',\r\n '|',\r\n 'fontSize',\r\n 'fontFamily',\r\n 'fontColor',\r\n 'fontBackgroundColor',\r\n '|',\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'strikethrough',\r\n 'subscript',\r\n 'superscript',\r\n 'code',\r\n 'removeFormat',\r\n '|',\r\n 'specialCharacters',\r\n 'horizontalLine',\r\n 'link',\r\n 'insertImage',\r\n 'mediaEmbed',\r\n 'insertTable',\r\n 'highlight',\r\n 'blockQuote',\r\n 'codeBlock',\r\n '|',\r\n 'alignment',\r\n '|',\r\n 'bulletedList',\r\n 'numberedList',\r\n 'todoList',\r\n 'outdent',\r\n 'indent'\r\n ],\r\n shouldNotGroupWhenFull: false\r\n },\r\n plugins: [\r\n AccessibilityHelp,\r\n Alignment,\r\n Autoformat,\r\n AutoImage,\r\n AutoLink,\r\n Autosave,\r\n BlockQuote,\r\n Bold,\r\n CloudServices,\r\n Code,\r\n CodeBlock,\r\n Essentials,\r\n FindAndReplace,\r\n FontBackgroundColor,\r\n FontColor,\r\n FontFamily,\r\n FontSize,\r\n GeneralHtmlSupport,\r\n Heading,\r\n Highlight,\r\n HorizontalLine,\r\n ImageBlock,\r\n ImageCaption,\r\n ImageInline,\r\n ImageInsertViaUrl,\r\n ImageResize,\r\n ImageStyle,\r\n ImageTextAlternative,\r\n ImageToolbar,\r\n ImageUpload,\r\n Indent,\r\n IndentBlock,\r\n Italic,\r\n Link,\r\n LinkImage,\r\n List,\r\n ListProperties,\r\n MediaEmbed,\r\n Paragraph,\r\n PasteFromOffice,\r\n RemoveFormat,\r\n SelectAll,\r\n SpecialCharacters,\r\n SpecialCharactersArrows,\r\n SpecialCharactersCurrency,\r\n SpecialCharactersEssentials,\r\n SpecialCharactersLatin,\r\n SpecialCharactersMathematical,\r\n SpecialCharactersText,\r\n Strikethrough,\r\n Style,\r\n Subscript,\r\n Superscript,\r\n Table,\r\n TableCaption,\r\n TableCellProperties,\r\n TableColumnResize,\r\n TableProperties,\r\n TableToolbar,\r\n TextTransformation,\r\n TodoList,\r\n Underline,\r\n Undo\r\n ],\r\n fontFamily: {\r\n supportAllValues: true\r\n },\r\n fontSize: {\r\n options: [10, 12, 14, 'default', 18, 20, 22],\r\n supportAllValues: true\r\n },\r\n licenseKey: 'GPL',\r\n heading: {\r\n options: [\r\n {\r\n model: 'paragraph',\r\n title: 'Paragraph',\r\n class: 'ck-heading_paragraph'\r\n },\r\n {\r\n model: 'heading1',\r\n view: 'h1',\r\n title: 'Heading 1',\r\n class: 'ck-heading_heading1'\r\n },\r\n {\r\n model: 'heading2',\r\n view: 'h2',\r\n title: 'Heading 2',\r\n class: 'ck-heading_heading2'\r\n },\r\n {\r\n model: 'heading3',\r\n view: 'h3',\r\n title: 'Heading 3',\r\n class: 'ck-heading_heading3'\r\n },\r\n {\r\n model: 'heading4',\r\n view: 'h4',\r\n title: 'Heading 4',\r\n class: 'ck-heading_heading4'\r\n },\r\n {\r\n model: 'heading5',\r\n view: 'h5',\r\n title: 'Heading 5',\r\n class: 'ck-heading_heading5'\r\n },\r\n {\r\n model: 'heading6',\r\n view: 'h6',\r\n title: 'Heading 6',\r\n class: 'ck-heading_heading6'\r\n }\r\n ]\r\n },\r\n htmlSupport: {\r\n allow: [\r\n {\r\n name: /^.*$/,\r\n styles: true,\r\n attributes: true,\r\n classes: true\r\n }\r\n ]\r\n },\r\n image: {\r\n toolbar: [\r\n 'toggleImageCaption',\r\n 'imageTextAlternative',\r\n '|',\r\n 'imageStyle:inline',\r\n 'imageStyle:wrapText',\r\n 'imageStyle:breakText',\r\n '|',\r\n 'resizeImage'\r\n ]\r\n },\r\n link: {\r\n addTargetToExternalLinks: true,\r\n defaultProtocol: 'https://',\r\n decorators: {\r\n toggleDownloadable: {\r\n mode: 'manual',\r\n label: 'Downloadable',\r\n attributes: {\r\n download: 'file'\r\n }\r\n }\r\n }\r\n },\r\n list: {\r\n properties: {\r\n styles: true,\r\n startIndex: true,\r\n reversed: true\r\n }\r\n },\r\n placeholder: 'Type or paste your content here!',\r\n style: {\r\n definitions: [\r\n {\r\n name: 'Article category',\r\n element: 'h3',\r\n classes: ['category']\r\n },\r\n {\r\n name: 'Title',\r\n element: 'h2',\r\n classes: ['document-title']\r\n },\r\n {\r\n name: 'Subtitle',\r\n element: 'h3',\r\n classes: ['document-subtitle']\r\n },\r\n {\r\n name: 'Info box',\r\n element: 'p',\r\n classes: ['info-box']\r\n },\r\n {\r\n name: 'Side quote',\r\n element: 'blockquote',\r\n classes: ['side-quote']\r\n },\r\n {\r\n name: 'Marker',\r\n element: 'span',\r\n classes: ['marker']\r\n },\r\n {\r\n name: 'Spoiler',\r\n element: 'span',\r\n classes: ['spoiler']\r\n },\r\n {\r\n name: 'Code (dark)',\r\n element: 'pre',\r\n classes: ['fancy-code', 'fancy-code-dark']\r\n },\r\n {\r\n name: 'Code (bright)',\r\n element: 'pre',\r\n classes: ['fancy-code', 'fancy-code-bright']\r\n }\r\n ]\r\n },\r\n table: {\r\n contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells', 'tableProperties', 'tableCellProperties']\r\n }\r\n };\r\n }\r\n}\r\n\r\n","<div [class]=\"{ 'input-text-padding': !classic }\">\r\n <!-- <ion-item #itemInput lines=\"none\" (ionBlur)=\"blurItem()\"\r\n style=\" --background: inherited; --background-focused: transparent; padding-right: 0px; overflow: visible;\"\r\n [class]=\"itemClass + ' classic' + ' item-text-wrap'\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"> -->\r\n @if (label) {\r\n <ion-label style=\"color: var(--input-label-color); font-size: 13px;\">{{ label }}</ion-label>\r\n }\r\n @if (Editor) {\r\n <ckeditor #inputEmail class=\"ckeditor-form\" [data]=\"data\" [editor]=\"Editor\" [config]=\"config\" (change)=\"writeValue($event.editor.getData(), false)\" (blur)=\"blurEditor($event)\"></ckeditor>\r\n }\r\n <!-- </ion-item> -->\r\n</div>","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-input-arquivo',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './input-arquivo.html',\r\n styleUrl: './input-arquivo.scss',\r\n})\r\nexport class InputArquivoComponent implements OnInit, ControlValueAccessor {\r\n \r\n //@Input() disabled: boolean = false;\r\n //para upload automático\r\n @Input() pasta: string = \"\";\r\n @Input() nomeArquivo: string = \"\";\r\n @Input() subir: boolean = false;\r\n @Input() callback = new EventEmitter();\r\n\r\n @Input() caption: string = \"Selecionar arquivo\";\r\n @Input() tipoArquivo: string = \"image/*\";\r\n @Output() fileSelected = new EventEmitter();\r\n @Input() form: boolean = false;\r\n @Input() showIcon: boolean = false;\r\n @Input() icon: string = \"cloud-upload-outline\";\r\n @Input() iconSrc: string = \"\"; ///assets/icon/image_primary_24dp.svg\r\n @Input() btnExpand: string = \"block\";\r\n @Input() btnColor: string = \"primary\";\r\n @Input() btnFill: string = \"outline\";\r\n @Input() iconSlot: string = \"start\";\r\n @Input() arquivoTipos: string = \"image/*\";\r\n @Input() readOnly: boolean = false;\r\n\r\n //imagem\r\n @ViewChild('inputNome', { read: ElementRef, static: true }) myInput: any;\r\n public captureDataUrl: string = \"\";\r\n public formFile: any;\r\n public sucessoEvent: Subject<boolean> = new Subject();\r\n\r\n data: string = \"\";\r\n filename: string = \"\";\r\n\r\n private onChange: Function = (selectedColor: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n\r\n showImageBrowser() {\r\n this.myInput.nativeElement.click();\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.onChange(value);\r\n this.data = value;\r\n if (this.callback)\r\n this.callback.emit(this.filename);\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n loadImagem() {\r\n //console.log(this.myInput);\r\n this.formFile = this.myInput.nativeElement.files[0];\r\n \r\n if (this.fileSelected) {\r\n this.fileSelected.emit({ content: this.formFile, name: this.myInput.nativeElement.files[0].name });\r\n }\r\n\r\n if (this.form) {\r\n //this.formFile = this.myInput.nativeElement.files[0];\r\n this.sucessoEvent.next(true);\r\n\r\n } else {\r\n //this.formFile = this.myInput.nativeElement.files[0];\r\n this.getBase64FromFile(this.myInput.nativeElement.files[0])\r\n .then((result: any) => {\r\n //console.log('file: ', result.toString());\r\n //console.log('nome do arquivo: ', this.nomeArquivo.toLowerCase());\r\n let searchstr = result.toString().substring(0, result.toString().indexOf('base64,')) + 'base64,';\r\n console.log('searchstring', searchstr);\r\n if (this.subir) {\r\n this.captureDataUrl = result.toString().replace(searchstr, '');\r\n } else {\r\n this.captureDataUrl = result.toString();\r\n }\r\n //this.utils.showToast('Imagem carregada em memória.');\r\n this.sucessoEvent.next(true);\r\n //console.log('file', this.myInput.nativeElement.files[0]);\r\n this.filename = this.myInput.nativeElement.files[0].name;\r\n this.writeValue(this.captureDataUrl);\r\n\r\n\r\n\r\n // if (this.nomeArquivo && this.subir) {\r\n // this.arquivoService.setImagem({ Nome: this.nomeArquivo, Conteudo: this.captureDataUrl, Status: 0, Pasta: this.pasta })\r\n // .subscribe(result => {\r\n // console.log('result set imagem', result);\r\n // if (result.Status == 200) {\r\n // this.utils.showToast('Sucesso!');\r\n // } else {\r\n // this.utils.showAlert('Erro. Tente mais tarde.' + result.Conteudo);\r\n // }\r\n // }, error => {\r\n // this.utils.showAlert('Erro. Tente mais tarde.');\r\n // })\r\n // }\r\n\r\n }).catch(error => {\r\n this.sucessoEvent.next(false);\r\n })\r\n }\r\n }\r\n\r\n //util\r\n getBase64FromFile(file: File) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n });\r\n }\r\n}\r\n\r\n","<div style=\"text-align:center;\">\r\n <ion-button [fill]=\"btnFill\" size=\"normal\" [color]=\"btnColor\" (click)=\"showImageBrowser()\" [expand]=\"btnExpand\"\r\n [disabled]=\"readOnly\">\r\n @if (showIcon) {\r\n <ion-icon class=\"ion-padding-end\" [slot]=\"iconSlot\" [src]=\"iconSrc\" [name]=\"icon\"></ion-icon>\r\n }\r\n {{ caption }}\r\n </ion-button>\r\n <input type=\"file\" id=\"upimgfile\" name=\"uploadfile\" #inputNome [accept]=\"arquivoTipos\" (change)=\"loadImagem()\"\r\n style=\"display: none;\" />\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { IonRow, IonCol, IonIcon, AlertController } from \"@ionic/angular\";\r\nimport { AgendaSemanalHorario, AgendaSemanalItem, AgendaSemanalLegenda, DiaAgenda } from '../../lib/model/agenda-semanal-horario';\r\nimport { addIcons } from 'ionicons';\r\nimport { chevronBackOutline, chevronForwardOutline } from 'ionicons/icons';\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n imports: [IonIcon, IonCol, IonRow, NgClass],\r\n selector: 'kb-agenda-semanal',\r\n styleUrl: './agenda-semanal.scss',\r\n templateUrl: './agenda-semanal.html',\r\n})\r\nexport class AgendaSemanalComponent implements OnInit {\r\n\r\n @Input() itens: AgendaSemanalItem[] = [];\r\n @Input() legendas: AgendaSemanalLegenda[] = [];\r\n @Input() textoAjuda: string = '';\r\n @Input() horaInicio: number = 6;\r\n @Input() horaFim: number = 23;\r\n @Input() intervaloMinutos: number = 30;\r\n @Input() horariosPadrao: string[] = [];\r\n\r\n @Output() horarioSelecionado = new EventEmitter<AgendaSemanalHorario>();\r\n\r\n @Output() itemSelecionado = new EventEmitter<AgendaSemanalItem>();\r\n\r\n private readonly nomesMeses: string[] = [\r\n 'Janeiro',\r\n 'Fevereiro',\r\n 'Março',\r\n 'Abril',\r\n 'Maio',\r\n 'Junho',\r\n 'Julho',\r\n 'Agosto',\r\n 'Setembro',\r\n 'Outubro',\r\n 'Novembro',\r\n 'Dezembro'\r\n ];\r\n\r\n private readonly nomesDias: string[] = [\r\n 'Dom',\r\n 'Seg',\r\n 'Ter',\r\n 'Qua',\r\n 'Qui',\r\n 'Sex',\r\n 'Sáb'\r\n ];\r\n\r\n mesSelecionado: number = 0;\r\n anoSelecionado: number = 0;\r\n\r\n dataReferenciaSemana: Date = new Date();\r\n\r\n diasSemana: DiaAgenda[] = [];\r\n horarios: string[] = [];\r\n\r\n constructor(private alertController: AlertController) {\r\n addIcons({\r\n chevronBackOutline,\r\n chevronForwardOutline\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const hoje = new Date();\r\n\r\n hoje.setHours(0, 0, 0, 0);\r\n\r\n this.dataReferenciaSemana = this.obterSegundaFeira(hoje);\r\n this.atualizarMesAno(this.dataReferenciaSemana);\r\n this.gerarHorarios();\r\n this.gerarSemana(this.dataReferenciaSemana);\r\n }\r\n\r\n get nomeMes(): string {\r\n return this.nomesMeses[this.mesSelecionado];\r\n }\r\n\r\n get numeroMes(): string {\r\n return (this.mesSelecionado + 1).toString().padStart(2, '0');\r\n }\r\n\r\n mesAnterior(): void {\r\n const novaData = new Date(\r\n this.dataReferenciaSemana\r\n );\r\n\r\n novaData.setDate(\r\n novaData.getDate() - 30\r\n );\r\n\r\n this.gerarSemana(novaData);\r\n\r\n this.atualizarMesAno(\r\n this.dataReferenciaSemana\r\n );\r\n }\r\n\r\n proximoMes(): void {\r\n const novaData = new Date(\r\n this.dataReferenciaSemana\r\n );\r\n\r\n novaData.setDate(\r\n novaData.getDate() + 30\r\n );\r\n\r\n this.gerarSemana(novaData);\r\n\r\n this.atualizarMesAno(\r\n this.dataReferenciaSemana\r\n );\r\n }\r\n\r\n semanaAnterior(): void {\r\n const novaData = new Date(this.dataReferenciaSemana);\r\n\r\n novaData.setDate(novaData.getDate() - 7);\r\n\r\n this.gerarSemana(novaData);\r\n this.atualizarMesAno(this.dataReferenciaSemana);\r\n }\r\n\r\n proximaSemana(): void {\r\n const novaData = new Date(this.dataReferenciaSemana);\r\n\r\n novaData.setDate(novaData.getDate() + 7);\r\n\r\n this.gerarSemana(novaData);\r\n this.atualizarMesAno(this.dataReferenciaSemana);\r\n }\r\n\r\n obterSegundaFeira(data: Date): Date {\r\n const resultado = new Date(data);\r\n\r\n resultado.setHours(0, 0, 0, 0);\r\n\r\n const diaSemana = resultado.getDay();\r\n const diasVoltar = diaSemana === 0 ? 6 : diaSemana - 1;\r\n\r\n resultado.setDate(resultado.getDate() - diasVoltar);\r\n\r\n return resultado;\r\n }\r\n\r\n atualizarMesAno(data: Date): void {\r\n this.mesSelecionado = data.getMonth();\r\n this.anoSelecionado = data.getFullYear();\r\n }\r\n\r\n gerarSemana(dataReferencia: Date): void {\r\n const segunda = this.obterSegundaFeira(dataReferencia);\r\n\r\n this.dataReferenciaSemana = new Date(segunda);\r\n\r\n const domingo = new Date(segunda);\r\n\r\n domingo.setDate(domingo.getDate() - 1);\r\n\r\n this.diasSemana = [];\r\n\r\n for (\r\n let i = 0;\r\n i < 7;\r\n i++\r\n ) {\r\n const data = new Date(domingo);\r\n\r\n data.setDate(domingo.getDate() + i);\r\n\r\n this.diasSemana.push({\r\n data,\r\n numero: data.getDate(),\r\n nome: this.nomesDias[data.getDay()],\r\n hoje: this.ehHoje(data)\r\n });\r\n }\r\n }\r\n\r\n gerarHorarios(): void {\r\n this.horarios = [];\r\n\r\n const minutoInicio = this.horaInicio * 60;\r\n const minutoFim = (this.horaFim * 60) + 30;\r\n\r\n for (\r\n let minutoAtual = minutoInicio;\r\n minutoAtual <= minutoFim;\r\n minutoAtual += this.intervaloMinutos\r\n ) {\r\n const hora = Math.floor(minutoAtual / 60);\r\n const minuto = minutoAtual % 60;\r\n\r\n this.horarios.push(`${hora.toString().padStart(2, '0')}:${minuto.toString().padStart(2, '0')}`);\r\n }\r\n }\r\n\r\n ehHoje(data: Date): boolean {\r\n const hoje = new Date();\r\n\r\n return (data.getDate() === hoje.getDate() && data.getMonth() === hoje.getMonth() && data.getFullYear() === hoje.getFullYear());\r\n }\r\n\r\n getItem(dia: Date, horario: string): AgendaSemanalItem | undefined {\r\n return this.itens.find(item => {\r\n if (!item.DataHora) {\r\n return false;\r\n }\r\n\r\n const dataHora = new Date(item.DataHora);\r\n\r\n return (this.mesmaData(dataHora, dia) && this.formatarHorario(dataHora) === horario);\r\n });\r\n }\r\n\r\n async aplicarHorariosPadrao(data: Date): Promise<void> {\r\n if (!this.horariosPadrao.length) {\r\n const alert = await this.alertController.create({\r\n header: 'Horários Padrões',\r\n message: 'Nenhum horário padrão foi configurado.',\r\n buttons: ['OK']\r\n });\r\n\r\n await alert.present();\r\n return;\r\n }\r\n\r\n const dataFormatada = new Date(data).toLocaleDateString('pt-BR');\r\n\r\n const alert = await this.alertController.create({\r\n header: 'Horários Padrões',\r\n message: `Deseja adicionar os horários padrões no dia ${dataFormatada}?`,\r\n buttons: [{ text: 'Cancelar', role: 'cancel' }, { text: 'Adicionar', handler: () => { this.confirmarAplicacaoHorariosPadrao(data); } }]\r\n });\r\n\r\n await alert.present();\r\n }\r\n\r\n confirmarAplicacaoHorariosPadrao(data: Date): void {\r\n if (!this.horariosPadrao.length) {\r\n return;\r\n }\r\n\r\n const horariosExistentes = new Set<string>();\r\n\r\n this.itens.forEach(item => {\r\n if (!item.DataHora) {\r\n return;\r\n }\r\n\r\n const dataHora = new Date(item.DataHora);\r\n\r\n if (!this.mesmaData(dataHora, data)) {\r\n return;\r\n }\r\n\r\n horariosExistentes.add(this.formatarHorario(dataHora));\r\n });\r\n\r\n this.horariosPadrao.forEach(horario => {\r\n if (!this.horarios.includes(horario)) {\r\n return;\r\n }\r\n\r\n if (horariosExistentes.has(horario)) {\r\n return;\r\n }\r\n\r\n const dataHora = this.criarDataHora(data, horario);\r\n\r\n this.horarioSelecionado.emit({ DataHora: dataHora });\r\n\r\n horariosExistentes.add(horario);\r\n });\r\n }\r\n\r\n duploCliqueHorario(dia: Date, horario: string): void {\r\n const item = this.getItem(dia, horario);\r\n\r\n if (item) {\r\n this.itemSelecionado.emit({\r\n ...item\r\n });\r\n\r\n return;\r\n }\r\n\r\n this.horarioSelecionado.emit({ DataHora: this.criarDataHora(dia, horario) });\r\n }\r\n\r\n criarDataHora(dia: Date, horario: string): Date {\r\n const data = new Date(dia);\r\n const [hora, minuto] = horario.split(':');\r\n\r\n data.setHours(Number(hora), Number(minuto), 0, 0);\r\n\r\n return data;\r\n }\r\n\r\n mesmaData(\r\n data1: Date,\r\n data2: Date\r\n ): boolean {\r\n return (data1.getDate() === data2.getDate() && data1.getMonth() === data2.getMonth() && data1.getFullYear() === data2.getFullYear());\r\n }\r\n\r\n formatarHorario(data: Date): string {\r\n const hora = data.getHours().toString().padStart(2, '0');\r\n const minuto = data.getMinutes().toString().padStart(2, '0');\r\n\r\n return `${hora}:${minuto}`;\r\n }\r\n}\r\n","<div style=\"width:100%;box-sizing:border-box;\">\r\n <!-- LEGENDAS -->\r\n @if (legendas.length > 0 || textoAjuda) {\r\n <ion-row\r\n style=\"align-items:center;margin-bottom:8px;padding:6px 4px;min-height:70px;border-bottom:1px solid #cbd5e1;\">\r\n @for (legenda of legendas; track legenda.Texto) {\r\n <ion-col size=\"auto\">\r\n <div style=\"display:flex;align-items:center;gap:5px;\">\r\n <span [ngClass]=\"legenda.ClasseCss\"\r\n style=\"display:inline-block;width:18px;height:18px;border:1px solid #64748b;\">\r\n </span>\r\n <span style=\"font-size:18px;color:#475569;\">\r\n {{ legenda.Texto }}\r\n </span>\r\n </div>\r\n </ion-col>\r\n }\r\n\r\n @if (textoAjuda) {\r\n <ion-col style=\"display:flex;height:100%;justify-content:end;align-self:end;\">\r\n <div style=\"font-size:14px;color:#475569;\">\r\n {{ textoAjuda }}\r\n </div>\r\n </ion-col>\r\n }\r\n </ion-row>\r\n }\r\n\r\n <!-- GRADE -->\r\n <div style=\"width:100%;max-height:610px;overflow:auto;border:1px solid #475569;background:#ffffff;\">\r\n <table style=\"width:100%;min-width:900px;border-collapse:collapse;table-layout:fixed;font-size:12px;\">\r\n <!-- CABEÇALHO -->\r\n <thead style=\"position:sticky;top:0;z-index:10;background:#ffffff;\">\r\n <tr>\r\n <!-- MÊS / ANO -->\r\n <th\r\n style=\"width:90px;height:64px;padding:2px;border-right:1px solid #475569;border-bottom:1px solid #475569;background:#ffffff;\">\r\n <div style=\"font-size:10px;font-weight:400;color:#475569;\">\r\n {{ anoSelecionado }}\r\n </div>\r\n\r\n <div style=\"display:flex;align-items:center;justify-content:space-between;padding:0 2px;\">\r\n <button type=\"button\" (click)=\"mesAnterior()\"\r\n style=\"border:0;background:transparent;padding:0;cursor:pointer;\">\r\n <ion-icon name=\"chevron-back-outline\" style=\"font-size:16px;color:#334155;\">\r\n </ion-icon>\r\n </button>\r\n\r\n <span style=\"font-size:25px;line-height:1;font-weight:700;color:#84cc16;\">\r\n {{ numeroMes }}\r\n </span>\r\n\r\n <button type=\"button\" (click)=\"proximoMes()\"\r\n style=\"border:0;background:transparent;padding:0;cursor:pointer;\">\r\n <ion-icon name=\"chevron-forward-outline\" style=\"font-size:16px;color:#334155;\">\r\n </ion-icon>\r\n </button>\r\n </div>\r\n\r\n <div style=\"font-size:9px;color:#475569;margin-top:2px;\">\r\n {{ nomeMes }}\r\n </div>\r\n </th>\r\n\r\n <!-- DIAS -->\r\n @for (dia of diasSemana; track dia.data.getTime(); let primeiro = $first; let ultimo = $last) {\r\n <th [style.background]=\"dia.hoje ? '#fff7ed' : '#ffffff'\"\r\n style=\"height:64px;padding:3px;border-right:1px solid #475569;border-bottom:1px solid #475569;text-align:center;position:relative;\">\r\n\r\n @if (primeiro) {\r\n <button type=\"button\" (click)=\"semanaAnterior()\"\r\n style=\"position:absolute;left:3px;top:22px;border:0;background:transparent;padding:0;cursor:pointer;\">\r\n <ion-icon name=\"chevron-back-outline\" style=\"font-size:15px;color:#334155;\">\r\n </ion-icon>\r\n </button>\r\n }\r\n\r\n <div (dblclick)=\"aplicarHorariosPadrao(dia.data)\"\r\n [style.color]=\"dia.hoje ? '#fb923c' : '#134e4a'\"\r\n title=\"Duplo clique para aplicar os horários padrões\"\r\n style=\"font-size:24px;font-weight:700;line-height:1.1;cursor:pointer;user-select:none;\">\r\n {{ dia.numero }}\r\n </div>\r\n\r\n <div [style.color]=\"dia.hoje ? '#fb923c' : '#111827'\"\r\n style=\"font-size:11px;font-weight:700;margin-top:3px;\">\r\n {{ dia.nome }}\r\n </div>\r\n\r\n @if (ultimo) {\r\n <button type=\"button\" (click)=\"proximaSemana()\"\r\n style=\"position:absolute;right:3px;top:22px;border:0;background:transparent;padding:0;cursor:pointer;\">\r\n <ion-icon name=\"chevron-forward-outline\" style=\"font-size:15px;color:#334155;\">\r\n </ion-icon>\r\n </button>\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <!-- CORPO -->\r\n <tbody>\r\n @for (horario of horarios; track horario) {\r\n <tr>\r\n <!-- HORÁRIO -->\r\n <td\r\n style=\"width:90px;height:29px;padding:1px 4px;text-align:center;font-size:13px;color:#1e293b;background:#ffffff;border-right:1px solid #475569;border-bottom:1px solid #94a3b8;\">\r\n {{ horario }}\r\n </td>\r\n\r\n <!-- DIAS -->\r\n @for (dia of diasSemana; track dia.data.getTime()) {\r\n @let item = getItem(dia.data, horario);\r\n\r\n <td (dblclick)=\"duploCliqueHorario(dia.data, horario)\" [ngClass]=\"item?.ClasseCss || ''\"\r\n style=\"height:29px;padding:0;text-align:center;vertical-align:middle;cursor:pointer;border-right:1px solid #475569;border-bottom:1px solid #94a3b8;user-select:none;overflow:hidden;\">\r\n\r\n @if (item?.Texto) {\r\n <div\r\n style=\"width:100%;height:100%;min-height:27px;display:flex;align-items:center;justify-content:center;padding:1px 3px;box-sizing:border-box;overflow:hidden;\">\r\n <span\r\n style=\"font-size:9px;font-weight:600;line-height:1.05;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\">\r\n {{ item?.Texto }}\r\n </span>\r\n </div>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseBtnComponent implements OnInit {\r\n @Input() disabled: boolean = false;\r\n @Input() type: string = 'submit';\r\n @Input() icon: string = 'checkmark-outline';\r\n @Input() iconSrc: string = '';\r\n @Input() title: string = 'Salvar';\r\n @Input() fill: string = 'outline';\r\n @Input() expand: string = 'block';\r\n @Output() btnClick = new EventEmitter();\r\n @Input() size: string = 'default';\r\n @Input() iconSlot: string = 'start';\r\n @Input() color: string = 'primary';\r\n @Input() hint: string = '';\r\n\r\n ngOnInit(): void {\r\n return;\r\n }\r\n\r\n onClick() {\r\n if (this.btnClick)\r\n this.btnClick.emit();\r\n }\r\n\r\n resolveTheme(theme: string) {\r\n //console.log('resolve theme', theme);\r\n // if (theme == 'default') {\r\n // this.fill = 'outline';\r\n // } else {\r\n // this.fill = 'solid';\r\n // }\r\n if (theme == 'windows-theme') {\r\n this.fill = 'solid';\r\n }\r\n }\r\n}","import { Component, Input, OnInit } from '@angular/core';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\n\r\n@Component({\r\n selector: 'kb-btn-action',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-action.html',\r\n styleUrl: './btn-action.scss',\r\n})\r\nexport class BtnActionComponent extends BaseBtnComponent implements OnInit {\r\n @Input() override title: string = 'Abrir';\r\n @Input() override color: string = 'primary';\r\n @Input() hidden: boolean = false;\r\n @Input() override icon: string = '';\r\n @Input() override iconSrc: string = '';\r\n @Input() imgSrc: string = '';\r\n @Input() boxColor: string = '#4c8dff';\r\n @Input() btnMargin: string = '4px';\r\n @Input() override expand: string = 'block';\r\n @Input() iconStyle: string = '';\r\n @Input() titleStyle: string = '';\r\n buttonStyle: string = ''; \r\n constructor() {\r\n super();\r\n this.type = 'button';\r\n }\r\n\r\n override ngOnInit() {\r\n this.buttonStyle = ''; \r\n } \r\n\r\n}\r\n\r\n","<ion-button [color]=\"color\" [type]=\"type\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" [size]=\"size\"\n [hidden]=\"hidden\" (click)=\"onClick()\" class=\"kb-btn-action\"\n [title]=\"hint\">\n @if (icon || iconSrc) {\n <ion-icon [slot]=\"title ? iconSlot : 'icon-only'\" [name]=\"icon\" [src]=\"iconSrc\" [style]=\"iconStyle\"></ion-icon>\n }\n <span [style]=\"titleStyle\">{{ title }}</span>\n @if (imgSrc) {\n <img [src]=\"imgSrc\" [slot]=\"title ? iconSlot : 'icon-only'\" />\n }\n</ion-button>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\n\r\n@Component({\r\n selector: 'kb-btn-cancelar',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-cancelar.html',\r\n styleUrl: './btn-cancelar.scss',\r\n})\r\nexport class BtnCancelarComponent extends BaseBtnComponent implements OnInit {\r\n //@Input() override iconSrc = \"/assets/icon/limpar_purple_24dp.svg\";\r\n @Input() override icon = \"close-outline\";\r\n @Input() override title: string = 'Cancelar';\r\n @Input() override color: string = 'tertiary';\r\n //@Input() override icon: string = '';\r\n constructor() { \r\n super();\r\n this.type = 'button';\r\n } \r\n\r\n}\r\n","<ion-button [color]=\"color\" [type]=\"type\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" \n [size]=\"size\" class=\"kb-btn-cancelar\"\n (click)=\"onClick()\"\n [title]=\"hint\"> \n <ion-icon [slot]=\"title ? 'start' : 'icon-only'\" [src]=\"iconSrc\" [name]=\"icon\"></ion-icon>\n {{ title }}\n</ion-button> \n<!-- \n<ion-button color=\"tertiary\" fill=\"outline\" (click)=\"cancelarContato()\" style=\"box-shadow: #6370ff 0px 3px 3px 0.05px\"\n [disabled]=\"!selectedContato\">\n <ion-icon src=\"/assets/icon/limpar_purple_24dp.svg\"></ion-icon>\n Cancelar\n</ion-button>\n-->","import { Component, Input, OnInit } from '@angular/core';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\n\r\n@Component({\r\n selector: 'kb-btn-excluir',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-excluir.html',\r\n styleUrl: './btn-excluir.scss',\r\n})\r\nexport class BtnExcluirComponent extends BaseBtnComponent implements OnInit {\r\n @Input() override type: string = 'button';\r\n @Input() override expand: string = 'inline';\r\n @Input() override icon: string = 'trash'; \r\n @Input() override title: string = 'Excluir'; \r\n @Input() override color: string = 'danger';\r\n constructor() { \r\n super();\r\n }\r\n \r\n}\r\n","<ion-button [color]=\"color\" [type]=\"type\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" [size]=\"size\"\n (click)=\"onClick()\"\n [title]=\"hint\">\n @if (icon) {\n <ion-icon [slot]=\"title ? 'start' : 'icon-only'\" [name]=\"icon\"></ion-icon>\n }\n {{ title }}\n</ion-button>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\n\r\n@Component({\r\n selector: 'kb-btn-novo',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-novo.html',\r\n styleUrl: './btn-novo.scss',\r\n})\r\nexport class BtnNovoComponent extends BaseBtnComponent implements OnInit {\r\n @Input() override title: string = 'Novo';\r\n @Input() override icon: string = 'person-add'; \r\n @Input() override iconSrc: string = '';\r\n @Input() override expand: string = 'block';\r\n @Input() imgSrc: string = '';\r\n @Input() override color: string = 'primary';\r\n constructor() {\r\n super();\r\n this.type = 'button'; \r\n }\r\n \r\n}\r\n\r\n","<ion-button [color]=\"color\" [type]=\"type\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" [size]=\"size\"\n (click)=\"onClick()\" class=\"kb-btn-novo\"\n [title]=\"hint\">\n @if (icon || iconSrc) {\n <ion-icon [slot]=\"title ? 'start' : 'icon-only'\" [name]=\"icon\" [src]=\"iconSrc\"></ion-icon>\n }\n {{ title }}\n @if (imgSrc) {\n <img [src]=\"imgSrc\" [slot]=\"title ? 'start' : 'icon-only'\" />\n }\n</ion-button>\n<!-- \n<ion-button (click)=\"novoContato()\" fill=\"outline\" style=\"box-shadow: #4c8dff 0px 3px 3px 0.05px\">\n <ion-icon slot=\"start\" name=\"person-add\"></ion-icon>\n Novo\n</ion-button>\n-->","import { Component, Input, OnInit } from '@angular/core';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\n\r\n@Component({\r\n selector: 'kb-btn-salvar',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-salvar.html',\r\n styleUrl: './btn-salvar.scss',\r\n})\r\nexport class BtnSalvarComponent extends BaseBtnComponent implements OnInit {\r\n @Input() btnMargin: string = '4px';\r\n @Input() override color: string = 'success';\r\n constructor() { \r\n super();\r\n } \r\n \r\n}\r\n","<ion-button [color]=\"color\" [type]=\"type\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" [size]=\"size\"\n (click)=\"onClick()\" [style.margin]=\"btnMargin\" class=\"kb-btn-salvar\"\n [title]=\"hint\">\n <ion-icon [slot]=\"title ? 'start' : 'icon-only'\" [name]=\"icon\"></ion-icon>\n {{ title }}\n</ion-button>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-btn-rounded',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-rounded.html',\r\n styleUrl: './btn-rounded.scss',\r\n})\r\nexport class BtnRoundedComponent extends BaseBtnComponent implements OnInit {\r\n @Input() override title: string = 'Ok';\r\n @Input() override icon: string = ''; \r\n @Input() override iconSrc: string = '';\r\n @Input() override expand: string = 'inline';\r\n @Input() imgSrc: string = '';\r\n @Input() override color: string = 'primary';\r\n @Input() override fill: string = 'solid';\r\n constructor() {\r\n super();\r\n this.type = 'button'; \r\n }\r\n \r\n}\r\n\r\n","<ion-button [color]=\"color\" [type]=\"type\" shape=\"round\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" [size]=\"size\"\n (click)=\"onClick()\" class=\"kb-btn-rounded\"\n [title]=\"hint\">\n @if (icon || iconSrc) {\n <ion-icon [slot]=\"title ? 'start' : 'icon-only'\" [name]=\"icon\" [src]=\"iconSrc\"></ion-icon>\n }\n <!-- \n {{ title }}\n -->\n @if (title) {\n <span [innerHTML]=\"title\"></span>\n }\n @if (imgSrc) {\n <img [src]=\"imgSrc\" [slot]=\"title ? 'start' : 'icon-only'\" />\n }\n</ion-button>\n<!-- \n<ion-button (click)=\"novoContato()\" fill=\"outline\" style=\"box-shadow: #4c8dff 0px 3px 3px 0.05px\">\n <ion-icon slot=\"start\" name=\"person-add\"></ion-icon>\n Novo\n</ion-button>\n-->","import { Component } from '@angular/core';\n\n@Component({\n selector: 'kb-titulo',\n imports: [],\n templateUrl: './titulo.html',\n styleUrl: './titulo.scss',\n})\nexport class TituloComponent {}\n","<div>\n <h4 class=\"kb-titulo\">\n <ng-content></ng-content>\n </h4>\n</div>","/*\r\n * Public API Surface of appproject-framework\r\n */\r\n\r\nexport * from './lib/appproject-framework';\r\n\r\nexport * from './lib/services/lib.service';\r\nexport * from './lib/model/base-model';\r\nexport * from './lib/model/html-campo';\r\nexport * from './lib/model/html-row';\r\nexport * from './lib/model/pesquisa-campo';\r\nexport * from './lib/model/page-result';\r\nexport * from './lib/model/decorators';\r\nexport * from './lib/pipes/nome.pipe';\r\nexport * from './lib/pipes/valor-format.pipe';\r\nexport * from './lib/pipes/safe-html.pipe';\r\nexport * from './lib/model/tree-model';\r\nexport * from './lib/model/grid-tabela';\r\nexport * from './lib/model/evento-cadastro';\r\nexport * from './lib/model/evento-foco';\r\nexport * from './lib/model/intervalo';\r\nexport * from './lib/model/agenda-semanal-horario';\r\n\r\n//utils\r\nexport * from './utils/utils-geral.service';\r\nexport * from './utils/dominio';\r\nexport * from './utils/estado';\r\n\r\n//entity\r\nexport * from './entity/services/utils.service';\r\nexport * from './entity/services/base-entity';\r\nexport * from './entity/services/base-alerts';\r\nexport * from './entity/services/data.service';\r\nexport * from './entity/page/base-cadastro';\r\nexport * from './entity/page/base-page';\r\nexport * from './entity/services/cadastro.service';\r\n//lib config para data service\r\nexport * from './entity/services/lib-config';\r\nexport * from './entity/services/lib-config.token';\r\n\r\n//components\r\nexport * from './components/baseInputComponent';\r\nexport * from './components/input-text/input-text';\r\nexport * from './components/input-pesquisa/input-pesquisa';\r\nexport * from './components/input-area/input-area';\r\nexport * from './components/input-cep/input-cep';\r\nexport * from './components/input-valor/input-valor';\r\nexport * from './components/input-checkbox/input-checkbox';\r\nexport * from './components/input-format/input-format';\r\nexport * from './components/input-select/input-select';\r\nexport * from './components/input-radio/input-radio';\r\nexport * from './components/entity-edit/entity-edit';\r\nexport * from './components/grid-view/grid-view';\r\nexport * from './components/periodo-intervalo/periodo-intervalo';\r\nexport * from './components/input-html/input-html';\r\nexport * from './components/input-arquivo/input-arquivo';\r\nexport * from './components/agenda-semanal/agenda-semanal';\r\n//buttons\r\nexport * from './components/buttons/btn-action/btn-action';\r\nexport * from './components/buttons/btn-cancelar/btn-cancelar';\r\nexport * from './components/buttons/btn-excluir/btn-excluir';\r\nexport * from './components/buttons/btn-novo/btn-novo';\r\nexport * from './components/buttons/btn-salvar/btn-salvar';\r\nexport * from './components/buttons/btn-rounded/btn-rounded';\r\n//header\r\nexport * from './components/titulo/titulo';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["decorators.getRequired","decorators.getMinLength","decorators.getMaxLength","decorators.getEmail","decorators.getPattern","decorators.getMin","decorators.getMax","decorators.getIgnore","decorators.getTipo","decorators.getPosicao","decorators.getLabel","decorators.getPlaceholder","decorators.getReadOnly","decorators.getFormatted","i1","i2.CadastroService","i1.DataService"],"mappings":"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"}
1
+ {"version":3,"file":"appproject-framework.mjs","sources":["../../../projects/appproject-framework/src/lib/appproject-framework.ts","../../../projects/appproject-framework/src/lib/services/lib.service.ts","../../../projects/appproject-framework/src/lib/model/decorators.ts","../../../projects/appproject-framework/src/lib/model/base-model.ts","../../../projects/appproject-framework/src/lib/model/html-campo.ts","../../../projects/appproject-framework/src/lib/model/html-row.ts","../../../projects/appproject-framework/src/lib/model/pesquisa-campo.ts","../../../projects/appproject-framework/src/lib/model/page-result.ts","../../../projects/appproject-framework/src/lib/pipes/nome.pipe.ts","../../../projects/appproject-framework/src/lib/pipes/valor-format.pipe.ts","../../../projects/appproject-framework/src/lib/pipes/safe-html.pipe.ts","../../../projects/appproject-framework/src/lib/model/tree-model.ts","../../../projects/appproject-framework/src/lib/model/grid-tabela.ts","../../../projects/appproject-framework/src/lib/model/evento-cadastro.ts","../../../projects/appproject-framework/src/lib/model/evento-foco.ts","../../../projects/appproject-framework/src/lib/model/intervalo.ts","../../../projects/appproject-framework/src/utils/dominio.ts","../../../projects/appproject-framework/src/utils/utils-geral.service.ts","../../../projects/appproject-framework/src/entity/services/utils.service.ts","../../../projects/appproject-framework/src/entity/services/base-entity.ts","../../../projects/appproject-framework/src/entity/services/lib-config.token.ts","../../../projects/appproject-framework/src/entity/services/data.service.ts","../../../projects/appproject-framework/src/entity/page/base-page.ts","../../../projects/appproject-framework/src/entity/services/cadastro.service.ts","../../../projects/appproject-framework/src/entity/page/base-cadastro.ts","../../../projects/appproject-framework/src/components/baseInputComponent.ts","../../../projects/appproject-framework/src/components/input-text/input-text.ts","../../../projects/appproject-framework/src/components/input-text/input-text.html","../../../projects/appproject-framework/src/components/tree-view-nivel/tree-view-nivel.ts","../../../projects/appproject-framework/src/components/tree-view-nivel/tree-view-nivel.html","../../../projects/appproject-framework/src/components/tree-view/tree-view.ts","../../../projects/appproject-framework/src/components/tree-view/tree-view.html","../../../projects/appproject-framework/src/components/modal-treeview/modal-treeview.ts","../../../projects/appproject-framework/src/components/modal-treeview/modal-treeview.html","../../../projects/appproject-framework/src/components/input-pesquisa/input-pesquisa.ts","../../../projects/appproject-framework/src/components/input-pesquisa/input-pesquisa.html","../../../projects/appproject-framework/src/components/input-area/input-area.ts","../../../projects/appproject-framework/src/components/input-area/input-area.html","../../../projects/appproject-framework/src/components/input-cep/input-cep.ts","../../../projects/appproject-framework/src/components/input-cep/input-cep.html","../../../projects/appproject-framework/src/components/input-valor/input-valor.ts","../../../projects/appproject-framework/src/components/input-valor/input-valor.html","../../../projects/appproject-framework/src/components/input-checkbox/input-checkbox.ts","../../../projects/appproject-framework/src/components/input-checkbox/input-checkbox.html","../../../projects/appproject-framework/src/components/input-format/input-format.ts","../../../projects/appproject-framework/src/components/input-format/input-format.html","../../../projects/appproject-framework/src/components/input-select/input-select.ts","../../../projects/appproject-framework/src/components/input-select/input-select.html","../../../projects/appproject-framework/src/components/input-radio/input-radio.ts","../../../projects/appproject-framework/src/components/input-radio/input-radio.html","../../../projects/appproject-framework/src/components/entity-edit/entity-edit.ts","../../../projects/appproject-framework/src/components/entity-edit/entity-edit.html","../../../projects/appproject-framework/src/components/grid-view/grid-view.ts","../../../projects/appproject-framework/src/components/grid-view/grid-view.html","../../../projects/appproject-framework/src/components/periodo-intervalo/periodo-intervalo.ts","../../../projects/appproject-framework/src/components/periodo-intervalo/periodo-intervalo.html","../../../projects/appproject-framework/src/components/input-html/input-html.ts","../../../projects/appproject-framework/src/components/input-html/input-html.html","../../../projects/appproject-framework/src/components/input-arquivo/input-arquivo.ts","../../../projects/appproject-framework/src/components/input-arquivo/input-arquivo.html","../../../projects/appproject-framework/src/components/agenda-semanal/agenda-semanal.ts","../../../projects/appproject-framework/src/components/agenda-semanal/agenda-semanal.html","../../../projects/appproject-framework/src/components/buttons/baseBtnComponents.ts","../../../projects/appproject-framework/src/components/buttons/btn-action/btn-action.ts","../../../projects/appproject-framework/src/components/buttons/btn-action/btn-action.html","../../../projects/appproject-framework/src/components/buttons/btn-cancelar/btn-cancelar.ts","../../../projects/appproject-framework/src/components/buttons/btn-cancelar/btn-cancelar.html","../../../projects/appproject-framework/src/components/buttons/btn-excluir/btn-excluir.ts","../../../projects/appproject-framework/src/components/buttons/btn-excluir/btn-excluir.html","../../../projects/appproject-framework/src/components/buttons/btn-novo/btn-novo.ts","../../../projects/appproject-framework/src/components/buttons/btn-novo/btn-novo.html","../../../projects/appproject-framework/src/components/buttons/btn-salvar/btn-salvar.ts","../../../projects/appproject-framework/src/components/buttons/btn-salvar/btn-salvar.html","../../../projects/appproject-framework/src/components/buttons/btn-rounded/btn-rounded.ts","../../../projects/appproject-framework/src/components/buttons/btn-rounded/btn-rounded.html","../../../projects/appproject-framework/src/components/titulo/titulo.ts","../../../projects/appproject-framework/src/components/titulo/titulo.html","../../../projects/appproject-framework/src/public-api.ts","../../../projects/appproject-framework/src/appproject-framework.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'kb-appproject-framework',\n imports: [],\n template: ` <p>appproject-framework works!</p> `,\n styles: ``,\n})\nexport class AppprojectFramework {}\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibService {\r\n\r\n constructor() { }\r\n\r\n //formatação de campos\r\n static decimalToStringMil(number?: any) {\r\n if (number != null) {\r\n if (number == 0 || number == '0') {\r\n return '0,00';\r\n }\r\n //console.log(number);\r\n let numero = number.toFixed(2).split('.');\r\n numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.');\r\n return numero.join(',').replace('-.', '-');\r\n } else\r\n return '';\r\n }\r\n\r\n static strToFloatZeroPontuacao(str: string | any): number {\r\n if (Number.isFinite(str))\r\n return str;\r\n if (this.isEmpty(str))\r\n return 0;\r\n else {\r\n //a string tem 2 casas decimais\r\n let semPontos = str.replace('.', '').replace(',', '');\r\n return this.round((parseInt(semPontos) / 100), 2);\r\n }\r\n }\r\n\r\n static isEmpty(str: string | any): boolean {\r\n return str == null || str == '';\r\n }\r\n\r\n static round(value: number, decimals: number): number {\r\n return Number(Math.round(Number(value + 'e' + decimals)) + 'e-' + decimals);\r\n }\r\n\r\n static stringToDecimal(strVal: string, parse: boolean = false): any {\r\n if (Number.isFinite(strVal)) {\r\n return strVal;\r\n }\r\n if (!this.isEmpty(strVal)) {\r\n //\r\n let avalor = strVal.split(',');\r\n let valor = avalor[0].replace('.', '');\r\n let decimal = '00';\r\n if (avalor.length > 1) {\r\n decimal = avalor[1];\r\n }\r\n //return strVal.replace(',', '.');\r\n const result = `${valor}.${decimal}`;\r\n if (parse) {\r\n return parseFloat(result);\r\n } else {\r\n return result;\r\n }\r\n }\r\n else\r\n return null;\r\n }\r\n}\r\n","import \"reflect-metadata\";\r\n\r\nconst requiredMetadataKey = Symbol(\"required\");\r\nconst minLengthMetadataKey = Symbol(\"minLength\");\r\nconst maxLengthMetadataKey = Symbol(\"maxLength\");\r\nconst emailMetadataKey = Symbol(\"email\");\r\nconst patternMetadataKey = Symbol(\"pattern\");\r\nconst ignoreMetadataKey = Symbol(\"ignore\");\r\nconst minMetadataKey = Symbol(\"min\");\r\nconst maxMetadataKey = Symbol(\"max\");\r\n//para campos numericos formatados\r\nconst formattedMetadataKey = Symbol(\"format\");\r\n\r\n//para criar tela\r\nconst tipoMetadataKey = Symbol(\"tipo\");\r\nconst posicaoMetadataKey = Symbol(\"posicao\");\r\nconst labelMetadataKey = Symbol(\"label\");\r\nconst readOnlyMetadataKey = Symbol(\"readOnly\");\r\nconst placeholderMetadataKey = Symbol(\"placeholder\");\r\n\r\n//anotação de required\r\nexport function required(erroMsg: string) {\r\n return Reflect.metadata(requiredMetadataKey, erroMsg);\r\n}\r\nexport function getRequired(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(requiredMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de minLength\r\n/**\r\n * \r\n * @param props Objeto { size: number, message: string }\r\n * @returns \r\n */\r\nexport function minLength(props: any) {\r\n return Reflect.metadata(minLengthMetadataKey, props);\r\n}\r\n\r\nexport function getMinLength(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(minLengthMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de maxLength\r\n//anotação de maxLength\r\n/**\r\n * \r\n * @param props Objeto { size: number, message: string }\r\n * @returns \r\n */\r\nexport function maxLength(props: any) {\r\n return Reflect.metadata(maxLengthMetadataKey, props);\r\n}\r\n\r\nexport function getMaxLength(target:any, propertyKey: string) {\r\n return Reflect.getMetadata(maxLengthMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de email\r\nexport function email(msg: string) {\r\n return Reflect.metadata(emailMetadataKey, msg);\r\n}\r\nexport function getEmail(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(emailMetadataKey, target, propertyKey);\r\n}\r\n//anotação de pattern\r\nexport function pattern(props: any) {\r\n return Reflect.metadata(patternMetadataKey, props);\r\n}\r\nexport function getPattern(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(patternMetadataKey, target, propertyKey);\r\n}\r\n//anotação de ignore\r\nexport function ignore() {\r\n return Reflect.metadata(ignoreMetadataKey, true);\r\n}\r\nexport function getIgnore(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(ignoreMetadataKey, target, propertyKey);\r\n}\r\n//anotação do tipo\r\nexport function tipo(controle: string) {\r\n return Reflect.metadata(tipoMetadataKey, controle);\r\n}\r\n\r\nexport function getTipo(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(tipoMetadataKey, target, propertyKey);\r\n}\r\n\r\n/**\r\n * \r\n * @param posRowColSize Objeto { row: 1, col: 1, size: 6 }\r\n * @returns \r\n */\r\nexport function posicao(posRowColSize: any) {\r\n return Reflect.metadata(posicaoMetadataKey, posRowColSize);\r\n}\r\n\r\nexport function getPosicao(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(posicaoMetadataKey, target, propertyKey);\r\n}\r\n\r\n/**\r\n * \r\n * @param label Label do campo que vai mostrar no form\r\n * @returns \r\n */\r\nexport function label(label: string) {\r\n return Reflect.metadata(labelMetadataKey, label);\r\n}\r\n\r\nexport function getLabel(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(labelMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de min\r\n/**\r\n * \r\n * @param props Objeto { valor: number, message?: string }\r\n * @returns \r\n */\r\nexport function min(props: any) {\r\n return Reflect.metadata(minMetadataKey, props);\r\n}\r\n\r\nexport function getMin(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(minMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de maxLength\r\n//anotação de min\r\n/**\r\n * \r\n * @param props Objeto { valor: number, message?: string }\r\n * @returns \r\n */\r\nexport function max(props: any) {\r\n return Reflect.metadata(maxMetadataKey, props);\r\n}\r\n\r\nexport function getMax(target:any, propertyKey: string) {\r\n return Reflect.getMetadata(maxMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação format\r\nexport function formatted(campo: string) {\r\n return Reflect.metadata(formattedMetadataKey, campo);\r\n}\r\nexport function getFormatted(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(formattedMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de read-only\r\nexport function readOnly() {\r\n return Reflect.metadata(readOnlyMetadataKey, true);\r\n}\r\nexport function getReadOnly(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(readOnlyMetadataKey, target, propertyKey);\r\n}\r\n\r\n//anotação de placeholder\r\nexport function placeholder(placeholder: string) {\r\n return Reflect.metadata(placeholderMetadataKey, placeholder);\r\n}\r\nexport function getPlaceholder(target: any, propertyKey: string) {\r\n return Reflect.getMetadata(placeholderMetadataKey, target, propertyKey);\r\n}","import { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport * as decorators from './decorators';\r\nimport { PesquisaCampo } from './pesquisa-campo';\r\nimport { LibService } from '../services/lib.service';\r\nimport { HtmlRow } from './html-row';\r\nimport { HtmlCampo } from './html-campo';\r\nexport class BaseModel {\r\n Id: number | null;\r\n static CampoId: string = 'Id';\r\n static PesquisaCampos: PesquisaCampo[] = [];\r\n constructor(\r\n ) {\r\n this.Id = null;\r\n }\r\n\r\n\r\n getValidationMessages(): object {\r\n let validationMessages: any = {};\r\n\r\n\r\n Object.keys(this).forEach(name => {\r\n // console.log('msg campo', name);\r\n let messages: any[] = [];\r\n let req = decorators.getRequired(this, name);\r\n if (req) {\r\n messages.push({ type: 'required', message: req });\r\n }\r\n let minLength = decorators.getMinLength(this, name);\r\n if (minLength) {\r\n messages.push({ type: 'minlength', message: (minLength.message ? minLength.message : `Deve ter pelo menos ${minLength.size} caracteres`) });\r\n }\r\n let maxLength = decorators.getMaxLength(this, name);\r\n if (maxLength) {\r\n messages.push({ type: 'maxlength', message: `Deve ter no máximo ${maxLength} caracteres` });\r\n }\r\n let email = decorators.getEmail(this, name);\r\n if (email) {\r\n messages.push({ type: 'email', message: email });\r\n }\r\n let pattern = decorators.getPattern(this, name);\r\n if (pattern) {\r\n messages.push({ type: 'pattern', message: pattern.message })\r\n }\r\n let min = decorators.getMin(this, name);\r\n if (min) {\r\n messages.push({ type: 'min', message: (min.message ? min.message : `O Valor deve ser maior ou igual que ${min.valor}`) });\r\n }\r\n let max = decorators.getMax(this, name);\r\n if (max) {\r\n messages.push({ type: 'max', message: (max.message ? max.message : `O Valor deve ser menor ou igual que ${max.valor}`) });\r\n }\r\n\r\n validationMessages[name] = messages;\r\n });\r\n return validationMessages;\r\n }\r\n\r\n getForm(): FormGroup {\r\n const group: any = {};\r\n\r\n Object.keys(this).forEach(name => {\r\n // console.log('campo', name);\r\n let validators: any[] = [];\r\n let req = decorators.getRequired(this, name);\r\n if (req) {\r\n validators.push(Validators.required);\r\n }\r\n let minLength = decorators.getMinLength(this, name);\r\n if (minLength) {\r\n validators.push(Validators.minLength(minLength.size));\r\n }\r\n let maxLength = decorators.getMaxLength(this, name);\r\n if (maxLength) {\r\n validators.push(Validators.maxLength(maxLength));\r\n }\r\n let email = decorators.getEmail(this, name);\r\n if (email) {\r\n validators.push(Validators.email);\r\n }\r\n let pattern = decorators.getPattern(this, name);\r\n if (pattern) {\r\n validators.push(Validators.pattern(pattern.expression));\r\n }\r\n let min = decorators.getMin(this, name);\r\n if (min) {\r\n console.log('min', min)\r\n validators.push(Validators.min(min.valor));\r\n }\r\n let max = decorators.getMax(this, name);\r\n if (max) {\r\n console.log('max', max)\r\n validators.push(Validators.max(max.valor));\r\n }\r\n let ignore = decorators.getIgnore(this, name);\r\n if (!ignore) {\r\n group[name] = new FormControl('', validators);\r\n }\r\n });\r\n\r\n let form = new FormGroup(group);\r\n\r\n console.log(form);\r\n\r\n return form;\r\n }\r\n\r\n getHtmlForm(): HtmlRow[] {\r\n const rows: HtmlRow[] = [];\r\n const result: HtmlCampo[] = [];\r\n\r\n Object.keys(this).forEach(name => {\r\n // console.log('campo', name); \r\n let ignore = decorators.getIgnore(this, name);\r\n if (!ignore) {\r\n\r\n let tipo = decorators.getTipo(this, name);\r\n if (tipo) {\r\n let campo: HtmlCampo = { Nome: name, Tipo: tipo, ReadOnly: false, PlaceHolderVisivel: true, InputAction: false };\r\n\r\n\r\n let posicao = decorators.getPosicao(this, name);\r\n if (posicao) {\r\n campo.Row = posicao.row;\r\n campo.Col = posicao.col;\r\n campo.Size = posicao.size ?? 12;\r\n }\r\n\r\n let label = decorators.getLabel(this, name);\r\n if (label) {\r\n campo.Label = label;\r\n }\r\n\r\n let placeholder = decorators.getPlaceholder(this, name);\r\n if (placeholder) {\r\n campo.PlaceHolder = placeholder;\r\n }\r\n\r\n let maxLength = decorators.getMaxLength(this, name);\r\n if (maxLength) {\r\n campo.Tamanho = maxLength;\r\n }\r\n\r\n let readOnly = decorators.getReadOnly(this, name);\r\n if (readOnly) {\r\n campo.ReadOnly = true;\r\n }\r\n\r\n result.push(campo);\r\n }\r\n\r\n // let maxLength = decorators.getMaxLength(this, name);\r\n // if (maxLength) {\r\n\r\n // }\r\n // let email = decorators.getEmail(this, name);\r\n // if (email) {\r\n\r\n // }\r\n\r\n } else {\r\n let tipo = decorators.getTipo(this, name);\r\n if (tipo == 'sub-titulo') {\r\n let label = decorators.getLabel(this, name);\r\n const campo: HtmlCampo = { Nome: name, Tipo: tipo, ReadOnly: false, PlaceHolderVisivel: false };\r\n if (label) {\r\n campo.Label = label;\r\n }\r\n result.push(campo);\r\n } else if (tipo == 'input-button') {\r\n let label = decorators.getLabel(this, name);\r\n const campo: HtmlCampo = { Nome: name, Tipo: tipo, ReadOnly: false, PlaceHolderVisivel: false };\r\n if (label) {\r\n campo.Label = label;\r\n }\r\n let posicao = decorators.getPosicao(this, name);\r\n if (posicao) {\r\n campo.Row = posicao.row;\r\n campo.Col = posicao.col;\r\n campo.Size = posicao.size ?? 12;\r\n }\r\n result.push(campo);\r\n }\r\n\r\n }\r\n });\r\n\r\n //ordenar por row, col \r\n const ordered = result.sort((l, r) => (l.Row ?? 0) > (r.Row ?? 0) ? 1 : ((l.Row ?? 0) < (r.Row ?? 0) ? -1 : 0));\r\n let linhas: number[] = [];\r\n ordered.forEach(r => {\r\n if (linhas.indexOf(r.Row ?? 0) < 0) {\r\n linhas.push(r.Row ?? 0);\r\n }\r\n });\r\n\r\n let currentLinha = 0;\r\n linhas.forEach(r => {\r\n //pesquisar os campos da mesma linha e ordenar por coluna\r\n const cols = result.filter(c => c.Row == r).sort((l, r) => (l.Col ?? 0) > (r.Col ?? 0) ? 1 : ((l.Col ?? 0) < (r.Col ?? 0) ? -1 : 0));\r\n //verificar a sequencia das colunas para inserir coluna em branco\r\n let colsGaps: HtmlCampo[] = [];\r\n let currentCol = 0;\r\n cols.forEach(c => {\r\n currentCol++;\r\n while (currentCol < (c.Col ?? 0)) {\r\n currentCol++;\r\n colsGaps.push({ Nome: \"WhiteSpace\", Tipo: \"col\", Size: \"1\", ReadOnly: true, PlaceHolderVisivel: true });\r\n }\r\n colsGaps.push(c);\r\n })\r\n\r\n rows.push({ Linha: colsGaps });\r\n })\r\n\r\n return rows;\r\n }\r\n\r\n static setCamposFormatados(obj: any) {\r\n Object.keys(obj).forEach(name => {\r\n //console.log(name);\r\n const formatted = decorators.getFormatted(obj, name);\r\n if (formatted) {\r\n //console.log(name, formatted);\r\n obj[name] = LibService.decimalToStringMil(obj[formatted]);\r\n }\r\n });\r\n }\r\n\r\n static getCamposFormatados(obj: any) {\r\n Object.keys(obj).forEach(name => {\r\n //console.log(name);\r\n const formatted = decorators.getFormatted(obj, name);\r\n if (formatted) {\r\n obj[formatted] = LibService.strToFloatZeroPontuacao(obj[name]);\r\n }\r\n });\r\n }\r\n\r\n setCamposFormatados() {\r\n Object.keys(this).forEach(name => {\r\n //console.log(name);\r\n const formatted = decorators.getFormatted(this, name);\r\n if (formatted) {\r\n //console.log(name, formatted);\r\n this[name as keyof typeof this] = LibService.decimalToStringMil(this[formatted as keyof typeof this]);\r\n }\r\n });\r\n }\r\n\r\n getCamposFormatados() {\r\n Object.keys(this).forEach(name => {\r\n //console.log(name);\r\n const formatted = decorators.getFormatted(this, name);\r\n if (formatted) {\r\n //console.log(formatted, name);\r\n this[formatted as keyof typeof this] = LibService.strToFloatZeroPontuacao(this[name as keyof typeof this]) as any;\r\n }\r\n });\r\n }\r\n\r\n getFromJson(obj: any) {\r\n Object.keys(this).forEach(name => {\r\n if (obj.hasOwnProperty(name)) {\r\n this[name as keyof typeof this] = obj[name];\r\n }\r\n });\r\n }\r\n\r\n}","export class HtmlCampo {\r\n /**\r\n * Nome do campo que o controle faz binding formControlName\r\n */\r\n Nome!: string;\r\n /**\r\n * Tipo do controle da lib que deve ser desenhado. [input-text, input-select, input-pesquisa, input-area, input-checkbox, input-format, input-valor]\r\n */\r\n Tipo!: string;\r\n /**\r\n * Título do campo que será exibido\r\n */\r\n Label?: string;\r\n /**\r\n * Para input-select, array de objetos para a lista\r\n */\r\n Itens?: any[];\r\n /**\r\n * Para input-select, campo de id do objeto da lista. ex: 'Id', 'UsuarioId'\r\n */\r\n ItemId?: string;\r\n /**\r\n * Para input-select, campo que sera exibido no combo, ex: 'Nome', 'Descricao'\r\n */\r\n ItemNome?: string;\r\n /**\r\n * Tamanho digitável do campo, quantidade de caracteres\r\n */\r\n Tamanho?: string;\r\n ReadOnly: boolean = false;\r\n PlaceHolderVisivel: boolean = true;\r\n /**\r\n * Placeholder do campo, se não informado será o mesmo do label\r\n */\r\n PlaceHolder?: string;\r\n /**\r\n * Para input-text ['text', 'date', 'number']\r\n */\r\n TipoInput?: string;\r\n //posicionamento\r\n /**\r\n * Linha sequencial da posição do controle\r\n */\r\n Row?: number;\r\n /**\r\n * Coluna sequencial da posição do controle, pode ter furo na sequência, será tratado como um espaço\r\n */\r\n Col?: number;\r\n /**\r\n * Tamanho da coluna. col-md\r\n */\r\n Size?: string;\r\n /**\r\n * Linhas do input-area\r\n */\r\n Linhas?: number;\r\n /**\r\n * Para componente de pesquisa\r\n */\r\n UrlPesquisa?: string;\r\n UrlItem?: string;\r\n TipoPesquisa?: string;\r\n\r\n /**\r\n * Campo que será focado após o carregamento do form\r\n */\r\n focusField?: boolean;\r\n /**\r\n * Deve obter o foco \r\n */\r\n CampoFoco?: string;\r\n /**\r\n * Mascara para o Input Format\r\n */\r\n Formato?: string;\r\n\r\n //estilos\r\n /**\r\n * Estilo do label do separador\r\n */\r\n LabelStyle?: string;\r\n /**\r\n * Estilo geral do campo\r\n */\r\n CampoStyle?: string;\r\n\r\n //para botões\r\n /**\r\n * Nome do icon para o botão\r\n */\r\n Icon?: string;\r\n /**\r\n * Caminho do icon ex: assets/icons/icon.svg\r\n */\r\n IconSrc?: string;\r\n /**\r\n * Cor do botão: primary, secondary, light, tertiary, danger, warning, success\r\n */\r\n BtnColor?: string;\r\n /**\r\n * Expansão do botão: full, block, inline\r\n */\r\n BtnExpand?: string;\r\n /**\r\n * Tamanho do button, small, large, default\r\n */\r\n BtnSize?: string;\r\n //para action do input text\r\n /**\r\n * Exibir o botão do lado do input-text\r\n */\r\n InputAction?: boolean = false;\r\n /**\r\n * Ícone do botão de action\r\n */\r\n InputActionIcon?: string; \r\n /**\r\n * Flag para esconder o campo em tela\r\n */\r\n Hidden?: boolean = false;\r\n /**\r\n * Declaração para tratemento de change, quando implementado no cliente será chamado.\r\n * @param event Parâmetros emitidos com o change\r\n */\r\n change?(event: any) {\r\n\r\n }\r\n /**\r\n * Declaração para tratamento de click do botão\r\n * @param event \r\n */\r\n click?(event: any) {\r\n\r\n }\r\n}","import { HtmlCampo } from \"./html-campo\";\r\n\r\nexport class HtmlRow {\r\n Linha: HtmlCampo[] = [];\r\n}","export class PesquisaCampo {\r\n campo!: string;\r\n label!: string;\r\n format?: boolean;\r\n formatacao?: Function;\r\n width?: string;\r\n}","export class PageResult {\r\n pagina!: number\r\n totalRec!: number;\r\n lista: any[] = [];\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'nome',\r\n standalone: true\r\n})\r\nexport class NomePipe implements PipeTransform {\r\n\r\n transform(value: string, ...args: unknown[]): unknown {\r\n if (!value)\r\n return \"\";\r\n return value.split(' ')[0];\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LibService } from '../services/lib.service';\r\n\r\n@Pipe({\r\n name: 'valorFormat',\r\n standalone: true\r\n})\r\nexport class ValorFormatPipe implements PipeTransform {\r\n\r\n transform(value: number, ...args: unknown[]): any {\r\n //console.log('valorFormat', value);\r\n\r\n if (value != null) {\r\n if (Number.isFinite(value)) {\r\n try {\r\n return LibService.decimalToStringMil(value);\r\n } catch {\r\n return value;\r\n }\r\n } else {\r\n return value;\r\n }\r\n\r\n }\r\n return null;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safeHtml',\r\n standalone: true\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n\r\n constructor(private sanitized: DomSanitizer) { }\r\n \r\n transform(value: string, ...args: unknown[]): unknown {\r\n return this.sanitized.bypassSecurityTrustHtml(value);\r\n }\r\n\r\n}\r\n","export class Tree {\r\n Id!: number;\r\n Pai: number | null = null;\r\n Label!: string;\r\n Filhos: Tree[] = [];\r\n Expandido: boolean = false;\r\n Clicable: boolean = true;\r\n}","export class GridFiltroValor {\r\n Selecionado?: boolean;\r\n Valor?: any;\r\n}\r\nexport class GridColuna {\r\n Campo!: string; \r\n Titulo!: string; \r\n Tamanho?: string = '10%';\r\n Ordem?: boolean = true;\r\n Filtrar?: boolean = true; \r\n OrdemStatus?: 0 | 1 | -1 = 0;\r\n Tipo?: 'data' | 'number' | 'boolean' | 'string' = 'string';\r\n Valores?: GridFiltroValor[] = []; \r\n FiltroOperador?: string = '='; \r\n FiltroValor?: string = ''; \r\n FiltroVisivel?: boolean = false;\r\n Grupo?: boolean = false; \r\n Pipe?: string;\r\n PipeParams?: string = \"\";\r\n Alinhamento?: string;\r\n Default?: string = \"\";\r\n RenderFunction?(item: any): string {\r\n return '';\r\n };\r\n ClickFunction?(item: any) {\r\n \r\n };\r\n}\r\n\r\nexport class GridTabela {\r\n Selecionar?: boolean = false;\r\n Exportar?: boolean = false;\r\n CampoSelecionar?: string;\r\n Colunas!: GridColuna[];\r\n Excluir?: boolean = false;\r\n \r\n static init(grid: GridTabela) {\r\n console.log('init grid');\r\n if (grid.Selecionar == undefined) {\r\n grid.Selecionar = false;\r\n }\r\n if (grid.Exportar == undefined) {\r\n grid.Exportar = false;\r\n }\r\n if (grid.Excluir == undefined) {\r\n grid.Excluir = false;\r\n }\r\n\r\n if (grid.Colunas) {\r\n for (let col of grid.Colunas) {\r\n if (col.Tamanho == undefined) {\r\n col.Tamanho = \"10%\";\r\n }\r\n if (col.Ordem == undefined) {\r\n col.Ordem = true; \r\n }\r\n if (col.Filtrar == undefined) {\r\n col.Filtrar = true; \r\n }\r\n if (col.OrdemStatus == undefined) {\r\n col.OrdemStatus = 0;\r\n }\r\n if (col.Tipo == undefined) {\r\n col.Tipo = 'string';\r\n }\r\n if (col.Valores == undefined) {\r\n col.Valores = []; \r\n }\r\n if (col.FiltroOperador == undefined) {\r\n col.FiltroOperador = '='; \r\n }\r\n if (col.FiltroValor == undefined) {\r\n col.FiltroValor = ''; \r\n }\r\n if (col.FiltroVisivel == undefined) {\r\n col.FiltroVisivel = false;\r\n }\r\n if (col.Grupo == undefined) {\r\n col.Grupo = false; \r\n } \r\n if (col.PipeParams == undefined) {\r\n col.PipeParams = \"\";\r\n }\r\n if (col.Default == undefined) {\r\n col.Default = \"\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n static valoresFiltro(grid: GridTabela, dataSet: any[]) {\r\n console.log('init filtro grid', grid);\r\n grid.Colunas.forEach(c => {\r\n if (c.Filtrar) {\r\n //projetar a coluna\r\n let initial = [];\r\n let valores = dataSet.map(d => d[c.Campo]);\r\n c.Valores = valores.filter((value, index, self) => {\r\n return self.indexOf(value) === index;\r\n }).map(v => { return { Selecionado: false, Valor: v } });\r\n // console.log(c.Campo, valores);\r\n // console.log(c.Valores)\r\n }\r\n })\r\n }\r\n}\r\n","export class EventoCadastro {\r\n Cadastro!: string;\r\n Id!: number; \r\n}\r\n","export class EventoFoco {\r\n Campo!: string;\r\n}\r\n","export class Intervalo {\r\n valor!: number;\r\n selecionado: boolean = false;\r\n tipo: 'dia' | 'sem' | 'mes' = 'dia';\r\n}","export class Dominio {\n Id: number;\n Descricao: string;\n IdStr?: string;\n\n constructor(id: number, descricao: string, idStr?: string) {\n this.Id = id;\n this.Descricao = descricao;\n this.IdStr = idStr;\n }\n}","import { Injectable, Service } from '@angular/core';\r\nimport { Dominio } from './dominio';\r\nimport { EstadoLib } from './estado';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilsGeralService {\r\n constructor() { }\r\n\r\n getMeses(): Dominio[] {\r\n let meses: Dominio[] = [];\r\n meses.push(new Dominio(1, 'Janeiro'));\r\n meses.push(new Dominio(2, 'Fevereiro'));\r\n meses.push(new Dominio(3, 'Março'));\r\n meses.push(new Dominio(4, 'Abril'));\r\n meses.push(new Dominio(5, 'Maio'));\r\n meses.push(new Dominio(6, 'Junho'));\r\n meses.push(new Dominio(7, 'Julho'));\r\n meses.push(new Dominio(8, 'Agosto'));\r\n meses.push(new Dominio(9, 'Setembro'));\r\n meses.push(new Dominio(10, 'Outubro'));\r\n meses.push(new Dominio(11, 'Novembro'));\r\n meses.push(new Dominio(12, 'Dezembro'));\r\n return meses;\r\n }\r\n\r\n resolveMes(mes: number): string {\r\n switch (mes) {\r\n case 1: return 'Janeiro';\r\n case 2: return 'Fevereiro';\r\n case 3: return 'Março';\r\n case 4: return 'Abril';\r\n case 5: return 'Maio';\r\n case 6: return 'Junho';\r\n case 7: return 'Julho';\r\n case 8: return 'Agosto';\r\n case 9: return 'Setembro';\r\n case 10: return 'Outubro';\r\n case 11: return 'Novembro';\r\n case 12: return 'Dezembro';\r\n default: return '';\r\n }\r\n }\r\n\r\n getAnos(inicio: number, fim: number): Dominio[] {\r\n let anos: Dominio[] = [];\r\n for (let i = inicio; i <= fim; i++) {\r\n anos.push(new Dominio(i, i.toString()));\r\n }\r\n return anos;\r\n }\r\n getEstados(): EstadoLib[] {\r\n let estados = [];\r\n\r\n estados.push({ EstadoId: 1, Nome: 'Acre', Sigla: 'AC' });\r\n estados.push({ EstadoId: 2, Nome: 'Alagoas', Sigla: 'AL' });\r\n estados.push({ EstadoId: 3, Nome: 'Amazonas', Sigla: 'AM' });\r\n estados.push({ EstadoId: 4, Nome: 'Bahia', Sigla: 'BA' });\r\n estados.push({ EstadoId: 5, Nome: 'Ceará', Sigla: 'CE' });\r\n estados.push({ EstadoId: 6, Nome: 'Distrito Federal', Sigla: 'DF' });\r\n estados.push({ EstadoId: 7, Nome: 'Espírito Santo', Sigla: 'ES' });\r\n estados.push({ EstadoId: 8, Nome: 'Goiás', Sigla: 'GO' });\r\n estados.push({ EstadoId: 9, Nome: 'Maranhão', Sigla: 'MA' });\r\n estados.push({ EstadoId: 10, Nome: 'Mato Grosso', Sigla: 'MT' });\r\n estados.push({ EstadoId: 11, Nome: 'Mato Grosso do Sul', Sigla: 'MS' });\r\n estados.push({ EstadoId: 12, Nome: 'Minas Gerais', Sigla: 'MG' });\r\n estados.push({ EstadoId: 13, Nome: 'Pará', Sigla: 'PA' });\r\n estados.push({ EstadoId: 14, Nome: 'Paraíba', Sigla: 'PB' });\r\n estados.push({ EstadoId: 15, Nome: 'Paraná', Sigla: 'PR' });\r\n estados.push({ EstadoId: 16, Nome: 'Pernambucp', Sigla: 'PE' });\r\n estados.push({ EstadoId: 17, Nome: 'Piauí', Sigla: 'PI' });\r\n estados.push({ EstadoId: 18, Nome: 'Rio de Janeiro', Sigla: 'RJ' });\r\n estados.push({ EstadoId: 19, Nome: 'Rio Grande do Norte', Sigla: 'RN' });\r\n estados.push({ EstadoId: 20, Nome: 'Rio Grande do Sul', Sigla: 'RS' });\r\n estados.push({ EstadoId: 21, Nome: 'Rondônia', Sigla: 'RO' });\r\n estados.push({ EstadoId: 22, Nome: 'Roraima', Sigla: 'RR' });\r\n estados.push({ EstadoId: 23, Nome: 'Santa Catarina', Sigla: 'SC' });\r\n estados.push({ EstadoId: 24, Nome: 'São Paulo', Sigla: 'SP' });\r\n estados.push({ EstadoId: 25, Nome: 'Sergipe', Sigla: 'SE' });\r\n estados.push({ EstadoId: 26, Nome: 'Tocantins', Sigla: 'TO' });\r\n\r\n return estados;\r\n\r\n }\r\n //strings\r\n isEmpty(str: string | null | undefined): boolean {\r\n return str == null || str == undefined || str == '';\r\n }\r\n\r\n //validações\r\n validarCNPJ(cnpj: string) {\r\n\r\n cnpj = cnpj.replace(/[^\\d]+/g, '');\r\n\r\n if (cnpj == '') return false;\r\n\r\n if (cnpj.length != 14)\r\n return false;\r\n\r\n // Elimina CNPJs invalidos conhecidos\r\n if (cnpj == \"00000000000000\" ||\r\n cnpj == \"11111111111111\" ||\r\n cnpj == \"22222222222222\" ||\r\n cnpj == \"33333333333333\" ||\r\n cnpj == \"44444444444444\" ||\r\n cnpj == \"55555555555555\" ||\r\n cnpj == \"66666666666666\" ||\r\n cnpj == \"77777777777777\" ||\r\n cnpj == \"88888888888888\" ||\r\n cnpj == \"99999999999999\")\r\n return false;\r\n\r\n // Valida DVs\r\n let tamanho = cnpj.length - 2\r\n let numeros = cnpj.substring(0, tamanho);\r\n let digitos = cnpj.substring(tamanho);\r\n let soma = 0;\r\n let pos = tamanho - 7;\r\n for (let i = tamanho; i >= 1; i--) {\r\n soma += parseInt(numeros.charAt(tamanho - i)) * pos--;\r\n if (pos < 2)\r\n pos = 9;\r\n }\r\n let resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;\r\n if (resultado != parseInt(digitos.charAt(0)))\r\n return false;\r\n\r\n tamanho = tamanho + 1;\r\n numeros = cnpj.substring(0, tamanho);\r\n soma = 0;\r\n pos = tamanho - 7;\r\n for (let i = tamanho; i >= 1; i--) {\r\n soma += parseInt(numeros.charAt(tamanho - i)) * pos--;\r\n if (pos < 2)\r\n pos = 9;\r\n }\r\n resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;\r\n if (resultado != parseInt(digitos.charAt(1)))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n validarCPF(cpf: string) {\r\n let soma: number = 0;\r\n let resto: number;\r\n\r\n cpf = cpf.replace(/[^\\d]+/g, '');\r\n\r\n if (cpf == '') return false;\r\n\r\n if (cpf.length != 11)\r\n return false;\r\n\r\n if (cpf == \"00000000000\") return false;\r\n\r\n for (let i = 1; i <= 9; i++) {\r\n soma = soma + parseInt(cpf.substring(i - 1, i)) * (11 - i);\r\n }\r\n resto = (soma * 10) % 11;\r\n\r\n if ((resto == 10) || (resto == 11)) {\r\n resto = 0;\r\n }\r\n if (resto != parseInt(cpf.substring(9, 10))) {\r\n return false;\r\n }\r\n\r\n soma = 0;\r\n for (let i = 1; i <= 10; i++) {\r\n soma = soma + parseInt(cpf.substring(i - 1, i)) * (12 - i);\r\n }\r\n resto = (soma * 10) % 11;\r\n\r\n if ((resto == 10) || (resto == 11)) {\r\n resto = 0;\r\n }\r\n if (resto != parseInt(cpf.substring(10, 11))) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n validatePessoaJuridica(cnpj: string) {\r\n return (group: FormGroup): { [key: string]: any } => {\r\n let vCnpj = group.controls[cnpj].value;\r\n\r\n if (!this.validarCNPJ(vCnpj)) {\r\n return {\r\n invalidCnpj: true\r\n }\r\n }\r\n return { };\r\n\r\n }\r\n }\r\n\r\n validatePessoaFisicaJuridica(tipo: string, cnpj: string, cpf: string, obrigatorio: boolean = false) {\r\n return (group: FormGroup): { [key: string]: any } => {\r\n let vCnpj = group.controls[cnpj].value;\r\n let vCpf = group.controls[cpf].value;\r\n let tipoPessoa = group.controls[tipo].value;\r\n\r\n if (tipoPessoa == 'J') {\r\n // console.log('testa cnpj');\r\n if (this.isEmpty(vCnpj) && obrigatorio) {\r\n return {\r\n invalidCnpj: true\r\n }\r\n }\r\n if (!this.validarCNPJ(vCnpj)) {\r\n return {\r\n invalidCnpj: true\r\n }\r\n }\r\n }\r\n\r\n if (tipoPessoa == 'F') {\r\n // console.log('testa cpf');\r\n if (this.isEmpty(vCpf) && obrigatorio) {\r\n return {\r\n invalidCpf: true\r\n }\r\n }\r\n if (!this.validarCPF(vCpf)) {\r\n return {\r\n invalidCpf: true\r\n }\r\n }\r\n }\r\n\r\n return { };\r\n }\r\n }\r\n\r\n validateSenhas(senha: string, senhaConfirma: string) {\r\n // console.log(senha, senhaConfirma)\r\n return (group: FormGroup): { [key: string]: any } => {\r\n let vSenha = group.controls[senha].value;\r\n let vSenhaConfirma = group.controls[senhaConfirma].value;\r\n\r\n if (!this.isEmpty(vSenha) && vSenha != vSenhaConfirma) {\r\n return {\r\n invalidSenhas: true\r\n }\r\n }\r\n\r\n return { }\r\n }\r\n }\r\n\r\n validateSenhasTamanho(senha: string, tamanho: number) {\r\n return (group: FormGroup): { [key: string]: any } => {\r\n let vSenha = group.controls[senha].value;\r\n console.log(vSenha)\r\n if (!this.isEmpty(vSenha) && vSenha.length < tamanho) {\r\n return {\r\n invalidSenhaTamanho: true\r\n }\r\n }\r\n return { };\r\n }\r\n }\r\n\r\n //formatação de texto\r\n formataCampoValor(valor: string, Mascara: string, evento: any) {\r\n console.log(valor);\r\n if (this.isEmpty(valor))\r\n return null;\r\n //console.log(evento);\r\n\r\n //if (!this.keypressInteiro(evento))\r\n // return;\r\n\r\n var boleanoMascara;\r\n\r\n var Digitato = evento != null ? evento.keyCode : 0;\r\n let exp = /\\-|\\.|\\/|\\(|\\)| /g\r\n let campoSoNumeros = valor.replace(exp, \"\");\r\n\r\n var posicaoCampo = 0;\r\n var NovoValorCampo = \"\";\r\n var TamanhoMascara = campoSoNumeros.length;;\r\n\r\n if (Digitato != 8) { // backspace \r\n for (let i = 0; i <= TamanhoMascara; i++) {\r\n boleanoMascara = ((Mascara.charAt(i) == \"-\") || (Mascara.charAt(i) == \".\")\r\n || (Mascara.charAt(i) == \"/\"))\r\n boleanoMascara = boleanoMascara || ((Mascara.charAt(i) == \"(\")\r\n || (Mascara.charAt(i) == \")\") || (Mascara.charAt(i) == \" \"))\r\n if (boleanoMascara) {\r\n NovoValorCampo += Mascara.charAt(i);\r\n TamanhoMascara++;\r\n } else {\r\n NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);\r\n posicaoCampo++;\r\n }\r\n }\r\n return NovoValorCampo;\r\n } else {\r\n return valor;\r\n }\r\n }\r\n\r\n\r\n converterValorDecimalMil(campo: string, casas: number = 2): string {\r\n if (!this.isEmpty(campo)) {\r\n //console.log('converterValorDecimal');\r\n //console.log('campo:', campo, ' replaced: ', campo.replace(',', '').replace('.', '')); \r\n if (campo == '-') {\r\n return campo;\r\n }\r\n\r\n let valor = parseFloat(campo.replace(',', '').replace('.', '').replace('.', '').replace('.', ''));\r\n\r\n let valordiv = parseInt(\"1\" + this.stringOfChar(\"0\", casas));\r\n //valor /= 100; \r\n console.log(valor, '/', valordiv);\r\n valor /= valordiv;\r\n console.log('=', valor);\r\n return this.decimalToStringMil(valor);\r\n /*\r\n var str = valor.toString().replace('.', ',');\r\n var aStr = str.split(',');\r\n if (aStr.length == 1) {\r\n //str += ',00';\r\n str += ',' + this.stringOfChar('0', casas);\r\n }\r\n else {\r\n //str += this.stringOfChar('0', 2 - aStr[1].length);\r\n str += this.stringOfChar('0', casas - aStr[1].length);\r\n }\r\n return str;\r\n */\r\n }\r\n else\r\n return campo;\r\n }\r\n\r\n converterValorDecimal(campo: string, casas: number = 2): string {\r\n if (!this.isEmpty(campo)) {\r\n //console.log('converterValorDecimal');\r\n //console.log(campo); \r\n var valor = parseInt(campo.replace(',', ''));\r\n var valordiv = parseInt(\"1\" + this.stringOfChar(\"0\", casas));\r\n //valor /= 100;\r\n valor /= valordiv;\r\n\r\n var str = valor.toString().replace('.', ',');\r\n var aStr = str.split(',');\r\n if (aStr.length == 1) {\r\n //str += ',00';\r\n str += ',' + this.stringOfChar('0', casas);\r\n }\r\n else {\r\n //str += this.stringOfChar('0', 2 - aStr[1].length);\r\n str += this.stringOfChar('0', casas - aStr[1].length);\r\n }\r\n return str;\r\n }\r\n else\r\n return campo;\r\n }\r\n\r\n mascaraZeros(valor: string, mascara?: string) {\r\n var pad = \"000000\";\r\n if (mascara != null) {\r\n pad = mascara;\r\n }\r\n return pad.substring(0, pad.length - valor.length) + valor;\r\n }\r\n //substituição de caracteres\r\n converteCaracteresEspeciais(nome: string): string {\r\n var res = nome.replace(/Ã/g, \"A\");\r\n res = res.replace(/Á/g, \"A\");\r\n res = res.replace(/Ç/g, \"C\");\r\n res = res.replace(/É/g, \"E\");\r\n res = res.replace(/Â/g, \"A\");\r\n res = res.replace(/Ô/g, \"O\");\r\n res = res.replace(/Ó/g, \"O\");\r\n res = res.replace(/Ú/g, \"U\");\r\n res = res.replace(/Í/g, \"I\");\r\n return res;\r\n }\r\n\r\n //getbase64fromfile\r\n getBase64FromFile(file: File) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n });\r\n }\r\n\r\n getTextFromFile(file: File, charset = 'utf') {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsText(file, 'ISO-8859-1');\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n });\r\n }\r\n\r\n stringOfChar(str: string, tam: number): string {\r\n var res = '';\r\n for (var i = 0; i < tam; i++) {\r\n res += str;\r\n }\r\n return res;\r\n }\r\n\r\n round(value: number, decimals: number): number {\r\n return Number(Math.round(Number(value + 'e' + decimals)) + 'e-' + decimals);\r\n }\r\n decimalToStringAny(valor?: any, casas: number = 2): string {\r\n if (valor != null) {\r\n var str = valor.toString().replace('.', ',');\r\n var aStr = str.split(',');\r\n if (aStr.length == 1) {\r\n str += ',' + this.stringOfChar('0', casas);\r\n }\r\n else {\r\n str += this.stringOfChar('0', casas - aStr[1].length);\r\n }\r\n return str;\r\n }\r\n else\r\n return '';\r\n }\r\n decimalToStringMil(number?: any) {\r\n if (number != null) {\r\n if (number == 0 || number == '0') {\r\n return '0,00';\r\n }\r\n //console.log(number);\r\n let numero = number.toFixed(2).split('.');\r\n numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.');\r\n return numero.join(',').replace('-.', '-');\r\n } else\r\n return '';\r\n }\r\n digitarNumero(event: any) {\r\n console.log(event);\r\n if ((event.keyCode >= 48 && event.keyCode <= 57)\r\n || (event.keyCode >= 96 && event.keyCode <= 105)\r\n || (event.keyCode == 8)\r\n || (event.keyCode == 9)\r\n || (event.keyCode == 39)\r\n || (event.keyCode == 37)) {\r\n\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n strToIntZero(str: any): number {\r\n if (Number.isFinite(str))\r\n return str;\r\n if (this.isEmpty(str))\r\n return 0;\r\n else\r\n return parseInt(str);\r\n }\r\n\r\n strToFloatZero(str: any): number {\r\n if (Number.isFinite(str))\r\n return str;\r\n if (this.isEmpty(str))\r\n return 0;\r\n else\r\n return parseFloat(str.replace('.', '').replace(',', '.'));\r\n }\r\n\r\n stringToDecimal(strVal: string): any {\r\n if (!this.isEmpty(strVal)) {\r\n //\r\n let avalor = strVal.split(',');\r\n let valor = avalor[0].replace('.', '');\r\n let decimal = '00';\r\n if (avalor.length > 1) {\r\n decimal = avalor[1];\r\n }\r\n //return strVal.replace(',', '.');\r\n return `${valor}.${decimal}`;\r\n }\r\n else\r\n return null;\r\n }\r\n\r\n dateToStr(date: Date, separador: string = '-'): string | null {\r\n if (date != null) {\r\n let mes = date.getMonth() + 1;\r\n if (separador == '/') {\r\n return (date.getDate() >= 10 ? date.getDate() : ('0' + date.getDate())) + '/' + (mes >= 10 ? mes : ('0' + mes)) + '/' +\r\n date.getFullYear();\r\n ;\r\n } else {\r\n return date.getFullYear() + '-' + (mes >= 10 ? mes : ('0' + mes)) + '-' +\r\n (date.getDate() >= 10 ? date.getDate() : ('0' + date.getDate()));\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n dateTimeToStr(date: Date, separador: string = '-'): string | null {\r\n if (date != null) {\r\n let mes = date.getMonth() + 1;\r\n if (separador == '/') {\r\n return (date.getDate() >= 10 ? date.getDate() : ('0' + date.getDate())) + '/' + (mes >= 10 ? mes : ('0' + mes)) + '/' +\r\n date.getFullYear();\r\n ;\r\n } else if (separador == \"-\") {\r\n return date.getFullYear() + '-' + (mes >= 10 ? mes : ('0' + mes)) + '-' +\r\n (date.getDate() >= 10 ? date.getDate() : ('0' + date.getDate())) + ' ' +\r\n (date.getHours() >= 10 ? date.getHours() : ('0' + date.getHours())) + ':' +\r\n (date.getMinutes() >= 10 ? date.getMinutes() : ('0' + date.getMinutes())) + ':' +\r\n (date.getSeconds() >= 10 ? date.getSeconds() : ('0' + date.getSeconds()));\r\n } else {\r\n return date.getFullYear().toString() + (mes >= 10 ? mes : ('0' + mes)) +\r\n (date.getDate() >= 10 ? date.getDate() : ('0' + date.getDate())) +\r\n (date.getHours() >= 10 ? date.getHours() : ('0' + date.getHours())) +\r\n (date.getMinutes() >= 10 ? date.getMinutes() : ('0' + date.getMinutes())) +\r\n (date.getSeconds() >= 10 ? date.getSeconds() : ('0' + date.getSeconds()));\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n inicioMesAnterior(mes: number, ano: number) {\r\n let date: Date = new Date(ano, mes, 1);\r\n date.setMonth(date.getMonth() - 1);\r\n return date;\r\n }\r\n\r\n getDataFromString(str: string, hrs?: string): Date | null {\r\n if (this.isEmpty(str)) {\r\n return null;\r\n }\r\n let parts = str.split('-');\r\n let result = new Date(parseInt(parts[0]), (parseInt(parts[1]) - 1), parseInt(parts[2]));\r\n if (this.isEmpty(hrs)) {\r\n return result;\r\n } else {\r\n const horas = hrs!; //not null assertion, como foi verificado com isEmpty, ele deve conter um valor string\r\n let hparts = horas.split(':');\r\n result.setHours(parseInt(hparts[0]));\r\n result.setMinutes(parseInt(hparts[1]));\r\n if (hparts.length > 2) {\r\n result.setSeconds(parseInt(hparts[2]));\r\n }\r\n return result;\r\n }\r\n }\r\n //forms\r\n setFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\r\n Object.keys(entity).forEach(name => {\r\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\r\n return;\r\n }\r\n if (form.controls[name]) {\r\n form.controls[name].patchValue(entity[name], { onlySelf: true, emitEvent: false });\r\n form.get(name)?.markAsPristine();\r\n form.get(name)?.markAsUntouched();\r\n //console.log(name, form.get(name).dirty)// \r\n }\r\n });\r\n }\r\n\r\n getFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\r\n //console.log(form, ' = ', entity);\r\n Object.keys(entity).forEach(name => {\r\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\r\n return;\r\n }\r\n if (form.controls[name]) {\r\n entity[name] = form.controls[name].value; \r\n }\r\n });\r\n //console.log('getFormValues', entity);\r\n }\r\n\r\n getFormValidationErrors(form: FormGroup, messages: any): string[] {\r\n let result: string[] = [];\r\n Object.keys(form.controls).forEach(key => {\r\n\r\n const controlErrors = form.get(key)?.errors;\r\n if (controlErrors != null) {\r\n Object.keys(controlErrors).forEach(keyError => {\r\n //console.log('Key control: ' + key + ', keyError: ' + keyError + ', err value: ', controlErrors[keyError]);\r\n if (messages[key]) {\r\n messages[key].forEach((msg: any) => {\r\n if (msg['type'] == keyError) {\r\n console.log(msg['message']);\r\n result.push(msg['message']);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n //data hora\r\n converterDataFromDB(data: string): string {\r\n if (this.isEmpty(data))\r\n return '';\r\n let aValue = data;\r\n let aData = data.split(' ');\r\n console.log(aData);\r\n if (aData.length > 1) {\r\n aValue = aData[0];\r\n }\r\n console.log(aValue);\r\n if (aValue.indexOf('-') >= 0) {\r\n var sData = aValue.split('-');\r\n return sData[2] + '/' + sData[1] + '/' + sData[0];\r\n } else {\r\n return aValue;\r\n }\r\n }\r\n\r\n converterHoraFromDB(data: string): string {\r\n if (this.isEmpty(data))\r\n return '';\r\n\r\n if (data.indexOf(' ') > 0) {\r\n let sData = data.split(' ');\r\n let aHora = sData[1].split(':');\r\n return aHora[0] + ':' + aHora[1];\r\n } else if (data.indexOf(':') > 0) {\r\n let aHora = data.split(':');\r\n return aHora[0] + ':' + aHora[1];\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n copy(origem: any, destino: any): void {\r\n //Object.assign(destino, origem); //copia os filhos tbm\r\n // Handle Object\r\n\r\n if (origem instanceof Object) {\r\n for (var attr in destino) {\r\n if (origem.hasOwnProperty(attr)) destino[attr] = origem[attr];\r\n }\r\n }\r\n\r\n }\r\n\r\n //dominio classificação\r\n translateClassificacao(classificacao: string) {\r\n switch (classificacao) {\r\n case 'S': return 'Outras';\r\n case 'O': return 'Operacional';\r\n case 'F': return 'Fixa';\r\n case 'V': return 'Variável';\r\n case 'I': return 'Impostos';\r\n //case 'P': return 'Operacional';\r\n case 'C': return 'Conta Corrente';\r\n case 'T': return 'Transferências';\r\n case 'A': return 'Aplicação';\r\n case 'U': return 'Outros';\r\n default: return '';\r\n }\r\n }\r\n\r\n translateClassificacaoInverso(classificacao: string) {\r\n switch (classificacao) {\r\n case 'Outras':\r\n case 'OUTRAS': return 'S';\r\n case 'Operacional':\r\n case 'OPERACIONAL': return 'O';\r\n case 'Fixa':\r\n case 'FIXA': return 'F';\r\n case 'Variável':\r\n case 'VARIÁVEL':\r\n case 'VARIAVEL': return 'V';\r\n case 'Impostos':\r\n case 'IMPOSTOS': return 'I';\r\n // case 'Operacional':\r\n // case 'OPERACIONAL': return 'P';\r\n case 'Conta Corrente':\r\n case 'CONTA CORRENTE': return 'C';\r\n case 'Transferências':\r\n case 'TRANSFERÊNCIAS':\r\n case 'TRANSFERENCIAS': return 'T';\r\n case 'Aplicação':\r\n case 'APLICAÇÃO':\r\n case 'APLICACAO': return 'A';\r\n case 'Outros':\r\n case 'OUTROS': return 'U';\r\n default: return '';\r\n }\r\n }\r\n\r\n getImgComplemento(): string {\r\n let data = new Date();\r\n return `${data.getDate()}${data.getHours()}${data.getMilliseconds()}`;\r\n }\r\n\r\n compareDatas(data: Date, comparaData?: Date): boolean {\r\n if (!comparaData)\r\n comparaData = new Date();\r\n return data >= comparaData;\r\n }\r\n\r\n //erros\r\n extractErrorCode = (error: Response | any): number => {\r\n let erroCode: number;\r\n if (error instanceof Response) {\r\n const body = (error.json() || '') as any;\r\n const err = body['error'] || JSON.stringify(body)\r\n erroCode = error.status;\r\n } else {\r\n erroCode = error.status;\r\n }\r\n console.log('LogD erro service Code ', erroCode);\r\n return erroCode;\r\n }\r\n\r\n extractError = (error: Response | any): Promise<string> => {\r\n let erroMsg: string;\r\n if (error instanceof Response) {\r\n const body = (error.json() || '') as any;\r\n const err = body['error'] || JSON.stringify(body)\r\n erroMsg = `${error.status} - ${error.statusText || ''} ${err}`;\r\n //erroMsg = 'Erro response'; //error.error['message'] != null ? error.error['message'] : error.error\r\n } else {\r\n if (error.error instanceof Blob) {\r\n return (error.error as Blob).text();\r\n }\r\n erroMsg = error.error['message'] != null ? error.error['message'] : error.error; //error.message ? error.message : error.toString();\r\n }\r\n console.log('LogD erro service ', erroMsg);\r\n return new Promise((resolve, reject) => {\r\n resolve(erroMsg);\r\n })\r\n }\r\n\r\n handleObservableError(error: Response | any): Promise<string> {\r\n let code = this.extractErrorCode(error);\r\n console.log('error code', code);\r\n if (code == 401 || code == 404 || code == 0 || code == 502 || code == 503) {\r\n return new Promise((resolve, reject) => {\r\n if (code == 401) {\r\n\r\n\r\n /*\r\n if (this.authServiceBase) {\r\n this.authServiceBase.logout(true);\r\n }\r\n */\r\n\r\n /*\r\n if (this.routerBase) {\r\n this.routerBase.navigateByUrl('login');\r\n }\r\n */\r\n resolve('Acesso não autorizado. Faça login novamente.');\r\n } else if (code == 404) {\r\n resolve('Serviço não encontrado.');\r\n } else if (code == 0 || code == 502 || code == 503) {\r\n resolve('Não foi possivel conectar com o servidor');\r\n }\r\n })\r\n }\r\n else {\r\n return this.extractError(error);\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n//import { AlertController, LoadingController, ModalController, ToastController } from '@ionic/angular/standalone';\n//import { PesquisaResultado } from '../page/pesquisa-resultado/pesquisa-resultado';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilsService {\n constructor(\n // private alertCtrl: AlertController,\n // private loadingCtrl: LoadingController,\n // private modalCtrl: ModalController,\n // private toastCtrl: ToastController,\n ) { }\n\n //caixas de dialogo\n /*\n async showLoading(msg: string, cancelable: boolean = false): Promise<HTMLIonLoadingElement> {\n const loading = await this.loadingCtrl.create({\n message: msg,\n backdropDismiss: cancelable\n //duration: 2000\n });\n \n await loading.present();\n return loading;\n\n }\n */\n\n /*\n async showToast(msg: string) {\n const toast = await this.toastCtrl.create({\n message: msg,\n duration: 3000\n });\n await toast.present();\n }\n */\n\n /*\n async showAlert(msg: string, title?: string): Promise<HTMLIonAlertElement> {\n const alert = await this.alertCtrl.create({\n header: title,\n //subHeader: 'Subtitle',\n message: msg,\n buttons: ['OK']\n });\n\n await alert.present();\n\n return alert;\n }\n */\n\n /*\n async showConfirm(titulo: string, msg: string, ok: string, cancel: string, okAction: any, cancelAction: any = null) {\n const confirm = await this.alertCtrl.create({\n header: titulo,\n message: msg,\n buttons: [\n {\n text: ok,\n handler: () => {\n if (okAction != null)\n okAction();\n }\n },\n {\n text: cancel,\n handler: () => {\n if (cancelAction)\n cancelAction();\n }\n }\n ]\n });\n await confirm.present();\n }\n */\n\n /*\n async showConfirmPromise(titulo: string, msg: string, ok: string = 'Sim', cancel: string = 'Não'): Promise<boolean> {\n\n return new Promise(async (resolve, reject) => {\n const confirm = await this.alertCtrl.create({\n header: titulo,\n message: msg,\n buttons: [\n {\n text: ok,\n handler: () => resolve(true)\n },\n {\n text: cancel,\n handler: () => resolve(false)\n }\n ]\n });\n await confirm.present();\n }\n )\n }\n */\n\n\n /*\n async pesquisarModal(urlPesquisa: string, campos: any, callback: Function, listaPesquisa: any = null, funcaoPesquisa: Function | null = null) {\n const modal = await this.modalCtrl.create(\n {\n component: PesquisaResultado,\n componentProps: {\n url: urlPesquisa,\n filtro: campos.filtro,\n campoId: campos.campoId,\n campos: campos.campos,\n listaOrigem: listaPesquisa,\n funcaoPesquisa: funcaoPesquisa\n //campo1: campos.campo1,\n //campo2: campos.campo2,\n //campo1Label: campos.campo1Label,\n //campo2Label: campos.campo2Label\n },\n cssClass: 'my-custom-modal-pesquisa',\n }\n )\n \n modal.onDidDismiss().then(data => {\n let result = data['data'];\n if (result) {\n callback(result);\n }\n })\n //exibir a tela\n modal.present(); \n }\n */\n\n //forms\n setFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\n Object.keys(entity).forEach(name => {\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\n return;\n }\n if (form.controls[name]) {\n form.controls[name].patchValue(entity[name], { onlySelf: true, emitEvent: false });\n form.get(name)?.markAsPristine();\n form.get(name)?.markAsUntouched();\n //console.log(name, form.get(name).dirty)// \n }\n });\n }\n\n getFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\n console.log(form, ' = ', entity);\n Object.keys(entity).forEach(name => {\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\n return;\n }\n //console.log(name, form.controls[name], form.controls[name]?.value);\n if (form.controls[name]) {\n entity[name as keyof typeof entity] = form.controls[name].value; \n if (entity[name] === \"\") {\n entity[name] = null;\n }\n }\n });\n console.log('getFormValues', entity);\n }\n\n /*\n //formatação de campos\n static decimalToStringMil(number?: any) {\n if (number != null) {\n if (number == 0 || number == '0') {\n return '0,00';\n }\n //console.log(number);\n let numero = number.toFixed(2).split('.');\n numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.');\n return numero.join(',').replace('-.', '-');\n } else\n return '';\n }\n\n static strToFloatZeroPontuacao(str: any): number {\n if (Number.isFinite(str))\n return str;\n if (this.isEmpty(str))\n return 0;\n else {\n //a string tem 2 casas decimais\n let semPontos = str.replace('.', '').replace(',', '');\n return this.round((parseInt(semPontos) / 100), 2);\n }\n }\n\n \n static isEmpty(str: string | any): boolean {\n return str == null || str == '';\n }\n\n static round(value: number, decimals: number): number {\n return Number(Math.round(Number(value + 'e' + decimals)) + 'e-' + decimals);\n }\n */\n}\n","//import { BaseModel } from \"../model/base-model\";\n\nimport { Observable } from \"rxjs\";\nimport { BaseModel } from \"../../lib/model/base-model\";\n\nexport interface IBaseEntity<T extends BaseModel> {\n getEntidade(id: any): Observable<T>;\n getLista(params: any[]): Observable<T[]>;\n setEntidade(entidade: T): Observable<T>;\n updateEntidade(entidade: T): Observable<T>;\n deleteEntidade(id: any, entidade?: T): Observable<any>;\n setInativarEntidade(id: any): Observable<T>\n}\n","import { InjectionToken } from '@angular/core';\r\nimport { LibConfig } from './lib-config';\r\n\r\nexport const LibConfigService = new InjectionToken<LibConfig>('LibConfig');","import { Inject, Injectable, Service } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { LibConfig } from './lib-config';\r\nimport { LibConfigService } from './lib-config.token'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DataService {\r\n BASE_API: string;\r\n\r\n constructor(@Inject(LibConfigService) private config: LibConfig,\r\n private httpClient: HttpClient) { \r\n this.BASE_API = this.config.apiUrl;\r\n }\r\n\r\n /**\r\n * Obter uma lista de objetos\r\n * @param url Url parcial para fazer a requisição. ex /categoria\r\n * @returns \r\n */\r\n getLista<T>(url: string): Observable<T[]> {\r\n url = `${this.BASE_API}${url}`\r\n return this.httpClient.get<T[]>(url);\r\n }\r\n\r\n /**\r\n * Obter uma lista de objetos com paginação\r\n * @param url Url parcial para fazer a requisição. ex. /categoria\r\n * @param page Número da página\r\n * @param offset Número de registros por página\r\n * @param totalRec Total de registros\r\n * @returns Array dos objetos encontrados\r\n */\r\n getListaPage<T>(url: string, page: number, offset: number, totalRec: number): Observable<T> {\r\n url = `${this.BASE_API}${url}${url.indexOf('?') > -1 ? '&' : '?'}page=${page}&offset=${offset}&totalRec=${totalRec ? totalRec : ''}`;\r\n console.log('getListaPage', url);\r\n return this.httpClient.get<T>(url);\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo POST para salvar novo registro\r\n * Foi criado T e U porque tem caso que o tipo da request é diferente do tipo da response\r\n * @param url Url parcial para fazer a requisição\r\n * @param param Objeto para ser serializado\r\n * @returns Ok, Objeto com id gerado\r\n */\r\n postRequest<T, U>(url: string, param: U): Observable<T> {\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Content-Type', 'application/json; charset=utf-8');\r\n\r\n return this.httpClient.post<T>(`${this.BASE_API}/${url}`, param, { headers: headers });\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo POST para salvar novo registro\r\n * Foi criado T e U porque tem caso que o tipo da request é diferente do tipo da response\r\n * @param url Url parcial para fazer a requisição\r\n * @param param Objeto do tipo FormData\r\n * @returns Ok, Objeto com id gerado\r\n */\r\n postFormRequest<T>(url: string, param: FormData): Observable<T> { \r\n return this.httpClient.post<T>(`${this.BASE_API}/${url}`, param);\r\n } \r\n\r\n /**\r\n * Fazer requisição do tipo POST, esperando uma lista como response\r\n * Foi criado T e U porque tem caso que o tipo da request é diferente do tipo da response\r\n * @param url Url parcial para fazer a requisição\r\n * @param param Objeto para ser serializado\r\n * @returns Ok, Lista de objetos\r\n */\r\n postListRequest<T, U>(url: string, param: U): Observable<T[]> {\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Content-Type', 'application/json; charset=utf-8');\r\n return this.httpClient.post<T[]>(`${this.BASE_API}/${url}`, param, { headers: headers });\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo PUT para salvar um registro alterado\r\n * Foi criado T e U porque tem caso que o tipo da request é diferente do tipo da response\r\n * @param url Url parcial para fazer a requisição\r\n * @param param Objeto para ser serializado\r\n * @returns Ok, Objeto atualizado\r\n */\r\n putRequest<T, U>(url: string, param: U): Observable<T> {\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Content-Type', 'application/json; charset=utf-8');\r\n\r\n return this.httpClient.put<T>(`${this.BASE_API}/${url}`, param, { headers: headers });\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo PUT para salvar um registro alterado\r\n * Foi criado T e U porque tem caso que o tipo da request é diferente do tipo da response\r\n * @param url Url parcial para fazer a requisição\r\n * @param param Objeto do tipo FormData\r\n * @returns Ok, Objeto com id gerado\r\n */\r\n putFormRequest<T>(url: string, param: FormData): Observable<T> { \r\n return this.httpClient.put<T>(`${this.BASE_API}/${url}`, param);\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo GET para retornar uma lista de objetos\r\n * @param url url parcial para fazer a requisição\r\n * @returns Ok, lista encontrada\r\n */\r\n getListRequest<T>(url: string): Observable<T[]> {\r\n return this.httpClient.get<T[]>(`${this.BASE_API}/${url}`);\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo GET para um objeto\r\n * @param url url parcial para fazer a requisição\r\n * @returns Ok, objeto encontrado\r\n */\r\n getRequest<T>(url: string): Observable<T> {\r\n console.log(`${this.BASE_API}/${url}`);\r\n return this.httpClient.get<T>(`${this.BASE_API}/${url}`);\r\n }\r\n\r\n /**\r\n * Fazer requisição do tipo DELETE para excluir um registro permanentemente\r\n * @param url url parcial para fazer a requisição\r\n * @param param objeto opcional para geração de logs\r\n * @returns Ok, Error com mensagem\r\n */\r\n deleteRequest(url: string, param?: any) {\r\n if (param) {\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Content-Type', 'application/json; charset=utf-8');\r\n return this.httpClient.delete(`${this.BASE_API}/${url}`, { body: param, headers: headers });\r\n } else {\r\n return this.httpClient.delete(`${this.BASE_API}/${url}`);\r\n }\r\n }\r\n}\r\n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nconst extractErrorCode = async (error: Response | any): Promise<number> => {\n let erroCode: number;\n if (error instanceof Response) {\n const body = await error.json() || '';\n const err = body['error'] || JSON.stringify(body)\n erroCode = error.status;\n } else {\n erroCode = error.status;\n }\n console.log('LogD erro service Code ', erroCode);\n \n return erroCode;\n \n }\n \n const extractError = async (error: Response | any): Promise<string> => {\n let erroMsg: string;\n if (error instanceof Response) {\n const body = await error.json() || '';\n const err = body['error'] || JSON.stringify(body)\n erroMsg = `${error.status} - ${error.statusText || ''} ${err}`;\n //erroMsg = 'Erro response'; //error.error['message'] != null ? error.error['message'] : error.error\n } else {\n erroMsg = error.error['message'] != null ? error.error['message'] : error.error; //error.message ? error.message : error.toString();\n }\n console.log('LogD erro service ', erroMsg);\n \n return erroMsg;\n \n }\n\n@Component({\n template: ''\n }) \nexport abstract class BasePage implements OnInit {\n routerBase?: Router;\n constructor(router?: Router) {\n this.routerBase = router; // ?? null;\n \n console.log('onInit Base Service');\n \n }\n \n ngOnInit() { \n console.log('Base page');\n }\n \n protected handlePromiseError(error: Response | any): Promise<any> {\n return Promise.reject(extractError(error));\n }\n \n /*\n protected handleObservableError(error: Response | any): Observable<any> {\n return Observable.throw(extractError(error));\n }\n */\n protected async handleObservableError(error: Response | any): Promise<string> {\n let code = await extractErrorCode(error);\n if (code == 401) {\n \n /*\n if (this.authServiceBase) {\n this.authServiceBase.logout(true);\n }\n */ \n \n /*\n if (this.routerBase) {\n this.routerBase.navigateByUrl('login');\n }\n */\n return 'Acesso não autorizado. Faça login novamente.';\n } else {\n return extractError(error);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { EventoCadastro } from '../../lib/model/evento-cadastro';\nimport { EventoFoco } from '../../lib/model/evento-foco';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CadastroService {\n alteracaoFilho: BehaviorSubject<EventoCadastro> = new BehaviorSubject<EventoCadastro>({ Cadastro: 'Cadastro', Id: 0 });\n carregarRegistro: BehaviorSubject<EventoCadastro> = new BehaviorSubject<EventoCadastro>({ Cadastro: 'Cadastro', Id: 0 });\n novoMaster: BehaviorSubject<EventoCadastro> = new BehaviorSubject({ Cadastro: 'Cadastro', Id: 0 });\n novoRegistro: BehaviorSubject<EventoCadastro> = new BehaviorSubject({ Cadastro: 'Cadastro', Id: 0 });\n focoCampo: BehaviorSubject<EventoFoco> = new BehaviorSubject({ Campo: 'input' });\n \n}\n","\r\nimport { Component, EventEmitter, Inject, Input, OnInit, Output, OnDestroy } from \"@angular/core\";\r\nimport { FormControl, FormGroup, UntypedFormGroup, ValidationErrors } from \"@angular/forms\";\r\nimport { ActivatedRoute, Router } from \"@angular/router\";\r\n// import { BaseModel } from \"../model/base-model\";\r\n// import { PesquisaCampo } from \"../model/pesquisa-campo\";\r\nimport { IBaseEntity } from \"../services/base-entity\";\r\n//import { UtilsService } from \"../services/utils.service\";\r\nimport { BasePage } from \"./base-page\";\r\nimport { CadastroService } from \"../services/cadastro.service\";\r\nimport { filter, Subscription } from \"rxjs\";\r\nimport { IBaseAlerts } from \"../services/base-alerts\";\r\nimport { BaseModel } from \"../../lib/model/base-model\";\r\nimport { PesquisaCampo } from \"../../lib/model/pesquisa-campo\";\r\nimport { HtmlRow } from \"../../lib/model/html-row\";\r\nimport { HtmlCampo } from \"../../lib/model/html-campo\";\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport class BaseCadastro<T extends BaseModel> extends BasePage implements OnInit, OnDestroy {\r\n override routerBase?: Router;\r\n protected alertsBase!: IBaseAlerts;\r\n //dataService: DataService;\r\n activatedRouteBase?: ActivatedRoute;\r\n entidade?: T;\r\n entidadeForm: FormGroup<any>;\r\n selectedEntidade: T | null;\r\n validation_messages: any = {};\r\n salvando: boolean = false;\r\n cadastroServiceBase?: CadastroService;\r\n novoAfterDelete: boolean = true;\r\n /**\r\n * Exibir alert com erros de validação\r\n */\r\n mostrarValidacao: boolean = false;\r\n\r\n //emiter para teste\r\n @Output() entidadePosted = new EventEmitter<T>();\r\n\r\n //construtor\r\n creator!: new () => T;\r\n //custom functions\r\n // protected getEntidadeFunction: Function;\r\n // protected setEntidadeFunction: Function;\r\n // protected updateEntidadeFunction: Function;\r\n // protected deleteEntidadeFunction: Function;\r\n protected entidadeService!: IBaseEntity<T>\r\n //type: any;\r\n //pesquisa modal\r\n public filtro?: string;\r\n protected pesquisaUrl?: string;\r\n protected pesquisaCampoId?: string;\r\n protected pesquisaCampos?: PesquisaCampo[];\r\n\r\n //html form\r\n htmlForm: HtmlRow[] = [];\r\n\r\n //para grid\r\n temLista: boolean = false;\r\n @Input() itensLista: T[] = [];\r\n @Input() masterId!: number;\r\n @Output() atualizarItensEvent = new EventEmitter();\r\n atualizarItens: boolean = false;\r\n\r\n novoMasterSubscriptioName: string = \"Cadastro\";\r\n novoMasterSubscribe: Subscription | null = null;\r\n\r\n constructor(@Inject('type') private type: any,\r\n private activatedRouteI?: ActivatedRoute,\r\n //dataService?: DataService,\r\n router?: Router,\r\n cadastroService?: CadastroService\r\n ) {\r\n super(router);\r\n this.routerBase = router;\r\n this.activatedRouteBase = activatedRouteI;\r\n this.cadastroServiceBase = cadastroService;\r\n //construir o form\r\n this.selectedEntidade = new this.type();\r\n if (this.selectedEntidade != null) {\r\n this.entidadeForm = this.selectedEntidade.getForm();\r\n this.validation_messages = this.selectedEntidade.getValidationMessages();\r\n } else {\r\n let Id = new FormControl('');\r\n this.entidadeForm = new FormGroup({ Id });\r\n }\r\n\r\n //this.getHtmlForm();\r\n }\r\n\r\n getHtmlForm() {\r\n //construir o form html\r\n if (this.selectedEntidade != null) {\r\n this.htmlForm = this.selectedEntidade.getHtmlForm();\r\n }\r\n }\r\n\r\n customFields() {\r\n\r\n }\r\n\r\n customValidators() {\r\n\r\n }\r\n\r\n /**\r\n * Setar propiedades de lookup, pesquisa, pra não ficar amarrado ao model\r\n */\r\n customHtmlProps() {\r\n\r\n }\r\n\r\n getHtmlField(campo: string): HtmlCampo | null {\r\n //return this.htmlForm.find(f => f.Nome === campo);\r\n for (let row of this.htmlForm) {\r\n const result = row.Linha.find(f => f.Nome === campo);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async customInitValues() {\r\n\r\n }\r\n\r\n afterInitEmpresa() {\r\n\r\n }\r\n\r\n afterPreencherForm() {\r\n\r\n }\r\n\r\n afterCriarRegistro() {\r\n this.entidadeForm.patchValue({ Id: this.selectedEntidade?.Id ?? 0 });\r\n //setar o cmpo id do form com o id do objeto\r\n if (this.entidadeForm.controls[this.type.CampoId]) {\r\n this.entidadeForm.controls[this.type.CampoId].patchValue(this.selectedEntidade?.Id ?? 0);\r\n //console.log('campoid', this.type.CampoId, this.selectedEntidade.Id);\r\n }\r\n //console.log('afterCriarRegistro', this.entidadeForm.value);\r\n if (this.temLista) {\r\n this.atualizarItens = true;\r\n this.carregarItens();\r\n }\r\n }\r\n\r\n afterAtualizarRegistro() {\r\n if (this.temLista) {\r\n this.atualizarItens = true;\r\n this.carregarItens();\r\n }\r\n }\r\n\r\n afterDeleteRegistro() {\r\n if (this.temLista) {\r\n this.atualizarItens = true;\r\n this.carregarItens();\r\n this.selectedEntidade = null;\r\n }\r\n }\r\n\r\n afterPesquisaEntidade() {\r\n\r\n }\r\n\r\n async validarRegistro(): Promise<boolean> {\r\n if (this.mostrarValidacao) {\r\n if (!this.entidadeForm.valid) {\r\n const mensagens = this.getFormValidationErrors(this.entidadeForm, this.validation_messages);\r\n const valid = await this.alertsBase.showConfirmPromise('Erro...', `Por favor, verifique o formulário.<br>${mensagens.join('<br>')}`, 'Continuar', 'Cancelar');\r\n return valid;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n override ngOnInit() {\r\n\r\n super.ngOnInit();\r\n\r\n this.getHtmlForm();\r\n\r\n console.log('basecadastro oninit')\r\n\r\n //query params para ID da empresa contabilidade\r\n if (this.activatedRouteBase) {\r\n this.activatedRouteBase.queryParams.subscribe(params => {\r\n console.log('params:', params);\r\n if (params) {\r\n this.processarRouteParams(params);\r\n this.afterRouteParams();\r\n }\r\n });\r\n }\r\n\r\n this.customFields();\r\n\r\n this.customValidators();\r\n\r\n this.customHtmlProps();\r\n\r\n if (this.temLista) {\r\n this.inicializarLista();\r\n }\r\n\r\n // const id = this.activatedRouteBase.snapshot.paramMap.get('id');\r\n // if (id) {\r\n // this.getEntidade(parseInt(id));\r\n // } else {\r\n // this.novaEntidade();\r\n // }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.novoMasterSubscribe != null) {\r\n this.novoMasterSubscribe.unsubscribe();\r\n }\r\n //console.log('on destroy');\r\n if (this.atualizarItens) {\r\n this.atualizarItensEvent.emit(this.itensLista);\r\n }\r\n }\r\n\r\n inicializarLista() {\r\n if (this.cadastroServiceBase != null) {\r\n const novoMaster = this.cadastroServiceBase.novoMaster.pipe(\r\n filter(val => val.Cadastro == this.novoMasterSubscriptioName),\r\n //take(1), \r\n );\r\n\r\n\r\n this.novoMasterSubscribe = novoMaster.subscribe((result) => {\r\n console.log(\"novo subscribe\", result);\r\n this.selectedEntidade = null;\r\n });\r\n }\r\n //this.carregaItens();\r\n //iniciar com form fechado\r\n this.selectedEntidade = null;\r\n }\r\n\r\n carregarItens(novo: boolean = false) {\r\n this.entidadeService.getLista([this.masterId])\r\n .subscribe({\r\n next: (itens) => {\r\n this.itensLista = itens;\r\n if (novo) {\r\n this.novaEntidade();\r\n }\r\n }\r\n })\r\n }\r\n\r\n selecionarItemLista(item: T) {\r\n this.selectedEntidade = new this.type();\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.getFromJson(item);\r\n this.selectedEntidade.Id = item[this.type.CampoId as keyof typeof this.selectedEntidade] as number;\r\n }\r\n\r\n console.log(\"selected Entidade lista\", this.selectedEntidade);\r\n\r\n this.preencherForm();\r\n }\r\n\r\n async deleteItemLista(item: T, mensagem: string) {\r\n // this.selectedEntidade = cnae;\r\n // this.selectedEntidade.Id = cnae.EmpresaCnaeId;\r\n await this.deleteRegistro(mensagem, item);\r\n }\r\n\r\n\r\n // async showPesquisarModal() {\r\n\r\n // }\r\n\r\n async pesquisar(filtro?: string) {\r\n this.filtro = filtro ?? this.filtro;\r\n //const url = `/categorias?empresaId=${this.empresaSelecionadaId}&filtro=<FILTRO>`;\r\n //console.log('campoId: ', this.pesquisaCampoId ?? this.type.CampoId);\r\n\r\n //await this.showPesquisarModal();\r\n\r\n if (this.alertsBase) {\r\n\r\n this.alertsBase.pesquisarModal(this.pesquisaUrl ?? '',\r\n {\r\n filtro: this.filtro,\r\n campoId: this.pesquisaCampoId ?? this.type.CampoId,\r\n campos: this.pesquisaCampos ?? this.type.PesquisaCampos\r\n }, (result: any) => {\r\n this.getEntidade(result.Id, true);\r\n }, null, null);\r\n }\r\n\r\n }\r\n\r\n preencherForm() {\r\n if (!this.selectedEntidade) {\r\n return;\r\n }\r\n //setar o valor dos campos formatted\r\n if (this.selectedEntidade.setCamposFormatados) {\r\n this.selectedEntidade.setCamposFormatados();\r\n }\r\n console.log('preencher form', this.entidadeForm.value);\r\n this.setFormValues(this.entidadeForm, this.selectedEntidade);\r\n console.log('preencher form after', this.entidadeForm.value);\r\n this.afterPreencherForm();\r\n }\r\n\r\n async getEntidade(id: number, afterPesquisa = false) {\r\n //console.log('get entidade')\r\n let loading = await this.alertsBase.showLoading('Pesquisando...', false);\r\n //this.getEntidadeFunction(id)\r\n this.entidadeService.getEntidade(id)\r\n .subscribe({\r\n next: (result) => {\r\n console.log('get Entidade', result);\r\n loading.dismiss();\r\n //this.selectedEntidade = result;\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.getFromJson(result);\r\n this.selectedEntidade.Id = id;\r\n }\r\n console.log('get Entidade', this.selectedEntidade);\r\n this.preencherForm();\r\n if (afterPesquisa) {\r\n this.afterPesquisaEntidade();\r\n }\r\n }, error: (error) => {\r\n loading.dismiss();\r\n this.handleObservableError(error).then(msg => this.alertsBase.showAlert(msg, 'Aconteceu um erro...'));\r\n }\r\n })\r\n }\r\n\r\n afterNovaEntidade() {\r\n\r\n }\r\n\r\n async novaEntidade() {\r\n console.log('nova entidade');\r\n this.selectedEntidade = new this.type();\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.Id = 0;\r\n }\r\n //console.log(this.selectedEntidade);\r\n await this.customInitValues();\r\n this.preencherForm();\r\n this.afterNovaEntidade();\r\n }\r\n\r\n beforeSalvarEntidade() { }\r\n\r\n async salvarEntidade() {\r\n if (!this.validarRegistro()) {\r\n return;\r\n }\r\n this.beforeSalvarEntidade();\r\n if (this.selectedEntidade != null && this.selectedEntidade.Id == 0) {\r\n this.criarRegistro();\r\n }\r\n else {\r\n this.atualizarRegistro();\r\n }\r\n }\r\n\r\n beforeCriarRegistro() {\r\n if (this.selectedEntidade != null) {\r\n if (this.selectedEntidade.getCamposFormatados) {\r\n this.selectedEntidade.getCamposFormatados();\r\n }\r\n }\r\n }\r\n\r\n beforeAtualizarRegistro() {\r\n if (this.selectedEntidade != null && this.selectedEntidade.getCamposFormatados) {\r\n this.selectedEntidade.getCamposFormatados();\r\n }\r\n }\r\n\r\n async criarRegistro() {\r\n if (!this.selectedEntidade)\r\n return;\r\n this.salvando = true;\r\n let loading = await this.alertsBase.showLoading('Salvando...', false);\r\n //this.setEntidadeFunction(this.entidadeForm.value)\r\n //this.selectedEntidade = this.entidadeForm.value;\r\n this.getFormValues(this.entidadeForm, this.selectedEntidade);\r\n this.beforeCriarRegistro();\r\n this.entidadeService.setEntidade(this.selectedEntidade)\r\n .subscribe({\r\n next: (result) => {\r\n loading.dismiss();\r\n //this.selectedEntidade = result;\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.getFromJson(result);\r\n this.selectedEntidade.Id = result[this.type.CampoId as keyof typeof this.selectedEntidade] as number;\r\n }\r\n //console.log(this.selectedEntidade);\r\n //não preencher form com novo registro\r\n //this.preencherForm();\r\n //preencher o id\r\n const idRegistro = this.type.CampoId;\r\n this.entidadeForm.patchValue({ [idRegistro]: this.selectedEntidade?.Id ?? 0 });\r\n console.log('id', idRegistro, 'form value', this.entidadeForm.value);\r\n this.salvando = false;\r\n this.alertsBase.showToast('Cadastrado com sucesso.')\r\n //this.navCtrl.back();\r\n //emitir o resultado\r\n this.entidadePosted.emit(result);\r\n\r\n this.afterCriarRegistro();\r\n }, error: (error) => {\r\n console.log(error);\r\n loading.dismiss();\r\n this.salvando = false;\r\n this.handleObservableError(error).then(msg => this.alertsBase.showAlert(msg));\r\n }\r\n });\r\n }\r\n\r\n\r\n async atualizarRegistro() {\r\n if (!this.selectedEntidade)\r\n return;\r\n this.salvando = true;\r\n let loading = await this.alertsBase.showLoading('Atualizando...', false);\r\n //this.updateEntidadeFunction(this.entidadeForm.value)\r\n //this.selectedEntidade = this.entidadeForm.value;\r\n //salvar o id\r\n const id = this.selectedEntidade?.Id ?? -1;\r\n this.getFormValues(this.entidadeForm, this.selectedEntidade);\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.Id = id;\r\n }\r\n this.beforeAtualizarRegistro();\r\n this.entidadeService.updateEntidade(this.selectedEntidade)\r\n .subscribe({\r\n next: (result) => {\r\n loading.dismiss();\r\n //verificar se retornou a entidade e carregar os campos.\r\n if (result && result[this.type.CampoId as keyof typeof result] != null && this.selectedEntidade != null) {\r\n this.selectedEntidade.getFromJson(result);\r\n }\r\n\r\n this.salvando = false;\r\n this.alertsBase.showToast('Atualizado com sucesso.')\r\n this.afterAtualizarRegistro()\r\n //this.navCtrl.back();\r\n }, error: (error) => {\r\n loading.dismiss();\r\n this.salvando = false;\r\n this.handleObservableError(error).then(msg => this.alertsBase.showAlert(msg));\r\n }\r\n });\r\n }\r\n\r\n\r\n deleteRegistro(mensagem?: string, entidade?: T) {\r\n let selectedId = this.selectedEntidade?.Id;\r\n if (entidade) {\r\n selectedId = entidade[this.type.CampoId as keyof typeof entidade] as number;\r\n }\r\n this.alertsBase.showConfirm('Confirmação', mensagem ?? 'Tem certeza que quer apagar esse registro?', 'Sim', 'Não',\r\n async () => {\r\n //this.deleteEntidadeFunction(this.selectedEntidade.Id)\r\n let loading = await this.alertsBase.showLoading('Excluindo...', false);\r\n this.entidadeService.deleteEntidade(selectedId, entidade)\r\n .subscribe({\r\n next: (result) => {\r\n loading.dismiss();\r\n this.alertsBase.showToast('Registro excluido com sucesso.');\r\n if (this.novoAfterDelete) {\r\n this.novaEntidade();\r\n }\r\n this.afterDeleteRegistro();\r\n }, error: (error) => {\r\n loading.dismiss();\r\n this.handleObservableError(error).then(msg => this.alertsBase.showAlert(msg));\r\n }\r\n });\r\n }, null);\r\n }\r\n\r\n async inativarRegistro(campoInativado: string = '') {\r\n if (!this.selectedEntidade)\r\n return;\r\n let valor = '';\r\n let msg = \"Confirma a inativação do registro?\";\r\n if (campoInativado) {\r\n //verificar se o campo tem valor\r\n valor = this.entidadeForm.get(campoInativado)?.value;\r\n }\r\n\r\n if (valor) {\r\n msg = \"Confirma a ativação do registro?\";\r\n }\r\n\r\n this.alertsBase.showConfirm(\"Confirmar\", msg,\r\n \"Sim\", \"Não\", async () => {\r\n let loading = await this.alertsBase.showLoading(\"Inativando o registro...\", false);\r\n this.entidadeService.setInativarEntidade(this.selectedEntidade?.Id ?? 0).subscribe({\r\n next: (result) => {\r\n //this.selectedEntidade = result;\r\n if (this.selectedEntidade != null) {\r\n this.selectedEntidade.getFromJson(result);\r\n //this.selectedEntidade.Id = result.Id;\r\n this.selectedEntidade.Id = result[this.type.CampoId as keyof typeof result] as number;\r\n }\r\n this.alertsBase.showToast('Registro inativado com sucesso.');\r\n this.preencherForm();\r\n loading.dismiss();\r\n }, error: error => {\r\n loading.dismiss();\r\n this.handleObservableError(error).then(msg => this.alertsBase.showAlert(msg));\r\n }\r\n })\r\n }, null);\r\n }\r\n\r\n cancelar(novaEntidade: boolean = true) {\r\n if (this.selectedEntidade != null && this.selectedEntidade.Id != 0) {\r\n this.getEntidade(this.selectedEntidade.Id ?? 0);\r\n } else {\r\n if (novaEntidade) {\r\n this.novaEntidade();\r\n }\r\n }\r\n }\r\n\r\n processarRouteParams(params: any) {\r\n\r\n }\r\n\r\n afterRouteParams() {\r\n\r\n }\r\n\r\n //helpers para valores do form\r\n setFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\r\n Object.keys(entity).forEach(name => {\r\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\r\n return;\r\n }\r\n console.log('set form values', name, form.controls[name]);\r\n if (form.controls[name]) {\r\n //form.controls[name].patchValue(entity[name], { onlySelf: true, emitEvent: false });\r\n form.controls[name].patchValue(entity[name]);\r\n form.get(name)?.markAsPristine();\r\n form.get(name)?.markAsUntouched();\r\n //console.log(name, form.get(name).dirty)// \r\n }\r\n });\r\n }\r\n\r\n getFormValues(form: FormGroup, entity: any, ignoreFields?: string[]) {\r\n console.log(form, ' = ', entity);\r\n Object.keys(entity).forEach(name => {\r\n if (ignoreFields && ignoreFields.indexOf(name) > -1) {\r\n return;\r\n }\r\n //console.log(name, form.controls[name], form.controls[name]?.value);\r\n if (form.controls[name]) {\r\n entity[name as keyof typeof entity] = form.controls[name].value;\r\n if (entity[name] === \"\") {\r\n entity[name] = null;\r\n }\r\n }\r\n });\r\n console.log('getFormValues', entity);\r\n }\r\n\r\n getFormValidationErrors(form: FormGroup, messages: any): string[] {\r\n let result: string[] = [];\r\n Object.keys(form.controls).forEach(key => {\r\n\r\n const controlErrors = form.get(key)?.errors;\r\n if (controlErrors != null) {\r\n Object.keys(controlErrors).forEach(keyError => {\r\n //console.log('Key control: ' + key + ', keyError: ' + keyError + ', err value: ', controlErrors[keyError]);\r\n if (messages[key]) {\r\n messages[key].forEach((msg: any) => {\r\n if (msg['type'] == keyError) {\r\n console.log(msg['message']);\r\n result.push(msg['message']);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n return result;\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { FormGroup } from \"@angular/forms\";\r\n\r\n/**\r\n * Classe base para componentes de input\r\n */\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseInputComponent implements OnInit {\r\n /** Label para exibição do campo */\r\n @Input() label: string | undefined; // = 'Campo';\r\n @Input() tabindex: number = 0;\r\n /** Posição do label default, fixed, stacked, floating */\r\n @Input() labelPosition: 'default' | 'fixed' | 'stacked' | 'floating' = 'stacked';\r\n /** Nome da classe para usar na validação */\r\n @Input() validationClass: string = '';\r\n /** Tempo de resposta do input */\r\n @Input() debounce: number = 0;\r\n //@Input() nome: string = 'Campo';\r\n /** Texto exibido como placeholder ou ajuda */\r\n @Input() placeholder: string = '';\r\n /** Referência ao form que contém o input (reactive forms) */\r\n @Input() form!: FormGroup;\r\n /** Nome do campo do form (reactive forms) */\r\n @Input() campo: string = 'Campo';\r\n /** Nome do campo do form (reactive forms) */\r\n @Input('formControlName') formControlName: string = 'Campo';\r\n /** Tamanho máximo do input */\r\n @Input() max: string = '50';\r\n /** Array com messages de validação para exibir em tela */\r\n @Input() validation_messages: any[] = [];\r\n /** Tipo do input: text, date, number */\r\n @Input() type: string = \"text\";\r\n /** Flag de somente leitura */\r\n @Input() readonly: boolean = false;\r\n //@Input() leitura: boolean = false;\r\n /** Nome da classe do item container: padding, no-padding, no-padding-end, no-padding-start */\r\n @Input() itemClass: string = \"padding\";\r\n /** Evento blur */\r\n @Output() blur = new EventEmitter();\r\n /** Flag para exibir o botão de limpar campo */\r\n @Input() botaoLimpar: boolean = false;\r\n /** Cor default do label */\r\n @Input() labelColor: string = 'dark';\r\n /** Cor default do background */\r\n @Input() inputBackgroungColor: string = 'auto';\r\n /** Flag para sinalizar o campo como obrigatório na tela */\r\n @Input() showObrigatorio: boolean = true;\r\n /** Tamanho da fonte */\r\n @Input() fontSize: string = '16px';\r\n /** Ícone do input que vai exibir no início */\r\n @Input() icon: string = '';\r\n /** Src do arquivo ícone do input que vai exibir no início */\r\n @Input() iconSrc: string = '';\r\n /** Tipo de preenchimento outline = com borda; solid = cor solida */\r\n @Input() fill: 'solid' | 'outline' = 'outline';\r\n /** Modo do estilo: md, ios */\r\n @Input() mode: 'md' | 'ios' = 'md';\r\n /** Flag para estilo clássico */\r\n @Input() classic: boolean = false;\r\n /** Flag de campo obrigatório */\r\n Obrigatorio: boolean = false;\r\n /** Argumentos para o evento blur */\r\n @Input() blurArgs: any[] = [];\r\n /** Flag para exibir o botão de copiar valor */\r\n @Input() showSeeCopy: boolean = false;\r\n @Input() focusField: boolean = false; \r\n @Input() campoFoco: string = \"\";\r\n @Input() shape: string | undefined;\r\n constructor() {\r\n\r\n }\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n /** Determina se o campo tem a regra de validação required */\r\n getObrigatorio() {\r\n if (this.validation_messages) {\r\n this.Obrigatorio = this.validation_messages.find(m => m.type == 'required');\r\n }\r\n }\r\n}","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, Renderer2, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonLabel, IonInput, IonIcon, IonButton } from \"@ionic/angular\";\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'kb-input-text',\r\n templateUrl: './input-text.html',\r\n styleUrls: ['./input-text.scss', './../baseInputComponent.scss'],\r\n imports: [IonButton, IonIcon, IonItem, IonLabel, IonInput, NgClass, FormsModule],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputTextComponent,\r\n multi: true,\r\n },\r\n ],\r\n\r\n})\r\nexport class InputTextComponent extends BaseInputComponent\r\n implements OnInit, ControlValueAccessor, OnDestroy {\r\n\r\n @Input() showSeePassword: boolean = false;\r\n\r\n @Output() inputChange = new EventEmitter();\r\n\r\n //control value acessor\r\n public data!: string;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n @ViewChild(\"itemInput\", { read: ElementRef }) itemInput: any;\r\n\r\n @ViewChild(\"inputText\", { read: ElementRef }) inputTextControl!: IonInput;\r\n\r\n constructor(private renderer: Renderer2) {\r\n super();\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n }\r\n\r\n writeValue(value: string | any, type?: string): void {\r\n //Converte o valor corretamente de acordo com o tipo de input\r\n console.log('write value', value);\r\n let valueEval = value;\r\n if (type == \"number\") {\r\n if (Number(value) === 0) {\r\n //this.onChange(null);\r\n valueEval = null;\r\n } else {\r\n //this.onChange(Number(value));\r\n valueEval = Number(value);\r\n }\r\n } else if (type == \"date\") {\r\n //null se for \"\"\r\n if (value === \"\") {\r\n //this.onChange(null);\r\n valueEval = null;\r\n } else {\r\n //this.onChange(value);\r\n }\r\n } else {\r\n //this.onChange(value);\r\n } \r\n this.onChange(valueEval);\r\n this.data = valueEval;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n\r\n }\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n this.inputChange.emit(valor);\r\n }\r\n //para cores focus\r\n onBlur() {\r\n //console.log('input select blur')\r\n //document.getElementById(\"item-select\").classList.remove(\"item-has-focus\");\r\n\r\n if (this.classic) {\r\n setTimeout(() => {\r\n this.renderer.removeClass(this.itemInput.nativeElement, \"item-has-focus\");\r\n }, 200);\r\n }\r\n\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n }\r\n\r\n entered() {\r\n //adicionar classe ao ion-item, não funcionou\r\n console.log('input focused');\r\n if (this.classic) {\r\n setTimeout(() => {\r\n this.renderer.addClass(this.itemInput.nativeElement, \"item-has-focus\");\r\n }, 100);\r\n }\r\n\r\n }\r\n //ações dos botões\r\n changeTypeOfInput() {\r\n this.type = this.type == \"password\" ? \"text\" : \"password\";\r\n console.log('type:', this.type);\r\n }\r\n\r\n public setFocus() {\r\n this.inputTextControl.setFocus();\r\n }\r\n\r\n copiarClick() {\r\n // console.log(this.inputTextEdit.nativeElement);\r\n // console.log(this.inputTextEdit);\r\n let texto = this.data;\r\n if (this.type == 'date') {\r\n //texto = this.utils.converterDataHora(texto, false, false);\r\n }\r\n navigator.clipboard.writeText(texto);\r\n //this.utils.showToast('Copiado')\r\n }\r\n}\r\n","<!-- \n se label position = floating colocar padding = 12px \n \n -->\n<div [class]=\"{ 'input-text-padding': !classic }\">\n <!-- [label]=\"label\"\n [labelPlacement]=\"labelPosition\" -->\n @if(classic) {\n <ion-item #itemInput lines=\"none\"\n style=\" --background: inherited; --background-focused: transparent; padding-right: 0px;\"\n [class]=\"itemClass + ' classic'\"\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\n\n <!--\n <ion-label class=\"label-focus\" [position]=\"labelPosition\">{{ label }}</ion-label>\n -->\n @if (label) {\n <ion-label style=\"color: var(--input-label-color);\" position=\"{{ labelPosition }}\">{{ label }}</ion-label>\n }\n\n <!-- \n <ion-icon slot=\"start\" name=\"lock-closed\" aria-hidden=\"true\"></ion-icon>\n -->\n\n <ion-input #inputText [type]=\"type\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" \n (input)=\"writeValue(inputText.value, type)\" [value]=\"data\" (ionBlur)=\"onBlur()\" (ionFocus)=\"entered()\">\n </ion-input>\n\n\n @if (showSeePassword) {\n\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\n (click)=\"changeTypeOfInput()\">\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\n </ion-button>\n\n }\n\n @if (showSeeCopy) {\n\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\n </ion-button>\n\n }\n\n\n </ion-item>\n }\n @else {\n <ion-input #inputText [type]=\"type\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\"\n [placeholder]=\"placeholder\" class=\"modern\" maxlength=\"{{ max }}\" \n [value]=\"data\" mode=\"md\"\n (input)=\"writeValue(inputText.value, type)\" \n (ionInput)=\"onInputChange($event)\" \n (ionBlur)=\"onBlur()\" \n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake-modern' : '' \"\n [disabled]=\"readonly\" [shape]=\"shape\">\n @if (icon || iconSrc) {\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\n }\n\n @if (showSeePassword) {\n\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\n (click)=\"changeTypeOfInput()\">\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\n </ion-button>\n\n }\n\n @if (showSeeCopy) {\n\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\n </ion-button>\n\n }\n </ion-input>\n }\n\n @if(form) {\n <div class=\"validation-errors\">\n\n @for(validation of validation_messages; track validation.type) {\n <ng-container>\n @if(form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\n form.get(formControlName)?.touched)) {\n <div class=\"error-message\" [ngClass]=\"validationClass\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n\n </div>\n }\n\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { IonIcon } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-tree-view-nivel',\r\n imports: [IonIcon, ],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n templateUrl: './tree-view-nivel.html',\r\n styleUrl: './tree-view-nivel.scss',\r\n})\r\nexport class TreeViewNivelComponent implements OnInit {\r\n @Output() nivelClick = new EventEmitter();\r\n @Input() node: any;\r\n @Input() nivel: number = 1;\r\n @Input() currentSearch: string = ''; \r\n\r\n identacao: string = '';\r\n\r\n constructor(private sanitizer: DomSanitizer) { }\r\n\r\n ngOnInit() {\r\n for (let i=0; i<this.nivel;i++) {\r\n this.identacao += '<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>';\r\n }\r\n //console.log('IDENT', this.identacao)\r\n }\r\n\r\n nodeClick() {\r\n if (this.nivelClick) {\r\n this.nivelClick.emit(this.node);\r\n }\r\n }\r\n\r\n highlight(texto: string): any { \r\n if (!this.currentSearch)\r\n return texto;\r\n let index = texto.toLowerCase().indexOf(this.currentSearch.toLowerCase());\r\n //console.log(index);\r\n if (index >= 0) {\r\n return this.sanitizer.bypassSecurityTrustHtml(texto.substring(0, index) + '<strong style=\"background-color: yellow !important;\">' + texto.substring(index, index + this.currentSearch.length) + '</strong>' + texto.substring(index + this.currentSearch.length)); //texto.replace(this.textoPesquisa, `<strong>${this.textoPesquisa}</strong>`);\r\n } else {\r\n return texto;\r\n }\r\n }\r\n}\r\n\r\n","<span [innerHtml]=\"identacao\" class=\"node-link\"></span>\n<!-- mostrar a seta se tiver filhos ou se for raiz (nivel = 0)-->\n@if (!node.Expandido && (node.Filhos.length > 0 || nivel == 0)) {\n<span class=\"node-link\" (click)=\"node.Expandido = !node.Expandido\" class=\"boxSeta\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n</span>\n} \n@if (node.Expandido) {\n<span class=\"node-link\" (click)=\"node.Expandido = !node.Expandido\" class=\"boxSeta\">\n <ion-icon name=\"chevron-down-outline\"></ion-icon>\n</span>\n}\n<!--\n<span *ngIf=\"!node.Expandido\">&nbsp;&nbsp;&nbsp;</span>\n-->\n\n<!-- \n<span [class]=\"{ 'node-link' : node.Clicable === true, 'node-disabled': node.Clicable === false }\" (click)=\"nodeClick()\" title=\"{{ node.Label }}\"> {{ node.Label }}</span>\n-->\n<span [class]=\"{ 'node-link' : node.Clicable === true, 'node-disabled': node.Clicable === false }\" (click)=\"nodeClick()\"\n title=\"{{ node.Label }}\" [innerHTML]=\"highlight(node.Label)\"></span>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { TreeViewNivelComponent } from '../tree-view-nivel/tree-view-nivel';\nimport { Tree } from '../../lib/model/tree-model';\n\n@Component({\n selector: 'kb-tree-view',\n imports: [TreeViewNivelComponent],\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './tree-view.html',\n styleUrl: './tree-view.scss',\n\n})\nexport class TreeViewComponent implements OnInit {\n @Input() itens: any[] = [];\n @Input() campoId!: string;\n @Input() campoPai!: string;\n @Input() campoLabel!: string;\n @Input() cadastro: string = '';\n //sera o nome da chamada put, ex: [endpoint: CentroCustoPai]/id/pai\n //@Input() endpoint: string;\n @Input() caixaClass: string = 'caixa';\n @Output() beforeUpdate = new EventEmitter(); \n @Input() currentSearch: string = '';\n @Output() selecionarRegistro = new EventEmitter();\n\n arvore: Tree[] = [];\n\n ngOnInit(): void {\n //throw new Error('Method not implemented.');\n }\n\n montaArvore(pai: number, arvore: Tree[]): number {\n if (arvore && arvore.length > 0) {\n //procurar os filhos de cada no\n arvore.forEach(f => {\n //console.log('no atual:', f, );\n let filhos = this.itens.filter(i => i[this.campoPai] == f.Id);\n //console.log('filhos atual:', filhos);\n f.Filhos = [];\n filhos.forEach(fi => {\n f.Filhos.push({ Id: fi[this.campoId], Pai: f.Id, Label: fi[this.campoLabel], Filhos: [], Expandido: false, Clicable: (fi['ClicableTree'] == null || fi['ClicableTree'] === true) });\n });\n return this.montaArvore(0, f.Filhos);\n });\n return 0;\n } else {\n //console.log('sem filhos');\n return 0;\n }\n }\n\n arvoreClick(before: boolean = true) {\n if (this.beforeUpdate && before) {\n this.beforeUpdate.emit();\n return;\n }\n this.arvore = [];\n //console.log('tree itens', this.itens);\n if (this.itens && this.itens.length > 0) {\n //montar arvore pais\n this.itens.forEach(it => {\n if (this.campoPai && it[this.campoPai] == null) {\n //é pai\n this.arvore.push({ Id: it[this.campoId], Pai: null, Label: it[this.campoLabel], Filhos: [], Expandido: false, Clicable: (it['ClicableTree'] == null || it['ClicableTree'] === true) });\n\n }\n })\n this.montaArvore(0, this.arvore);\n\n console.log('arvore', this.arvore);\n }\n }\n\n expandir(arvore?: Tree[]): number {\n if (arvore == null) {\n arvore = this.arvore;\n }\n if (arvore && arvore.length > 0) {\n //procurar os filhos de cada no\n arvore.forEach(f => {\n //expandir\n f.Expandido = true;\n return this.expandir(f.Filhos);\n });\n return 0;\n } else {\n //console.log('sem filhos');\n return 0;\n }\n }\n\n carregarRegistro(node: Tree) {\n console.log('carrega registro', node);\n this.selecionarRegistro.next({ Cadastro: this.cadastro, Id: node.Id });\n }\n}\n","<div style=\"position: relative; height: auto; padding-left: 2%; background-color: white;\">\n @if (arvore) {\n <div [class]=\"caixaClass\" style=\"padding-left: 6px; font-size: 12px;\">\n <!-- raiz --> \n @for (raiz of arvore; track raiz.Id) { \n <div class=\"coluna\">\n <kb-tree-view-nivel [nivel]=\"0\" [node]=\"raiz\" [currentSearch]=\"currentSearch\"\n (nivelClick)=\"raiz.Clicable === true ? carregarRegistro(raiz) : null\">\n </kb-tree-view-nivel>\n \n @if(raiz.Expandido) {\n <div class=\"filho\">\n @for (nivel1 of raiz.Filhos; track nivel1.Id) {\n <div draggable=\"true\">\n <kb-tree-view-nivel [nivel]=\"1\" [node]=\"nivel1\" [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel1.Clicable === true ? carregarRegistro(nivel1): null\">\n </kb-tree-view-nivel>\n\n @if (nivel1 && nivel1.Expandido) {\n <div class=\"filho\">\n @for(nivel2 of nivel1.Filhos; track nivel2.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"2\" [node]=\"nivel2\" [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel2.Clicable === true ? carregarRegistro(nivel2): null\">\n </kb-tree-view-nivel>\n\n @if(nivel2 && nivel2.Expandido) {\n <div class=\"filho\">\n @for (nivel3 of nivel2.Filhos; track nivel3.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"3\" [node]=\"nivel3\" [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel3.Clicable === true ? carregarRegistro(nivel3): null\">\n </kb-tree-view-nivel>\n @if (nivel3 && nivel3.Expandido) {\n <div class=\"filho\">\n @for (nivel4 of nivel3.Filhos; track nivel4.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"4\" [node]=\"nivel4\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel4.Clicable === true ? carregarRegistro(nivel4): null\">\n </kb-tree-view-nivel>\n @if (nivel4 && nivel4.Expandido) {\n <div class=\"filho\">\n @for (nivel5 of nivel4.Filhos; track nivel5.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"5\" [node]=\"nivel5\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel5.Clicable === true ? carregarRegistro(nivel5): null\"></kb-tree-view-nivel>\n @if (nivel5 && nivel5.Expandido) {\n <div class=\"filho\">\n @for(nivel6 of nivel5.Filhos; track nivel6.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"6\" [node]=\"nivel6\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel6.Clicable === true ? carregarRegistro(nivel6): null\"></kb-tree-view-nivel>\n @if (nivel6 && nivel6.Expandido) {\n <div class=\"filho\">\n @for (nivel7 of nivel6.Filhos; track nivel7.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"7\" [node]=\"nivel7\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel7.Clicable === true ? carregarRegistro(nivel7): null\"></kb-tree-view-nivel>\n @if (nivel7 && nivel7.Expandido) {\n <div class=\"filho\">\n @for (nivel8 of nivel7.Filhos; track nivel8.Id)\n {\n <div>\n <kb-tree-view-nivel [nivel]=\"8\"\n [node]=\"nivel8\"\n (nivelClick)=\"nivel8.Clicable === true ? carregarRegistro(nivel8): null\"></kb-tree-view-nivel>\n @if (nivel8 && nivel8.Expandido) {\n <div class=\"filho\">\n @for (nivel9 of nivel8.Filhos; track\n nivel9.Id) {\n <div>\n <kb-tree-view-nivel [nivel]=\"9\"\n [node]=\"nivel9\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel9.Clicable === true ? carregarRegistro(nivel9): null\"></kb-tree-view-nivel>\n\n @if (nivel9 && nivel9.Filhos) {\n <div class=\"filho\">\n @for (nivel10 of nivel9.Filhos;\n track nivel10.Id) {\n <div>\n <kb-tree-view-nivel\n [nivel]=\"10\"\n [node]=\"nivel10\"\n [currentSearch]=\"currentSearch\"\n (nivelClick)=\"nivel10.Clicable === true ? carregarRegistro(nivel10): null\"></kb-tree-view-nivel>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }","import { ChangeDetectionStrategy, Component, Injector, Input, OnInit, Predicate, ViewChild } from '@angular/core';\r\nimport { TreeViewComponent } from '../tree-view/tree-view';\r\nimport { LoadingController, IonHeader, IonToolbar, IonTitle, IonButtons, IonButton, IonIcon, IonContent, IonItem, ModalController } from '@ionic/angular';\r\n\r\nimport { Subscription } from 'rxjs';\r\nimport { DataService } from '../../entity/services/data.service';\r\n\r\n@Component({\r\n selector: 'kb-modal-treeview',\r\n imports: [IonItem, IonContent, IonIcon, IonButton, IonButtons, IonTitle, IonToolbar, IonHeader, \r\n TreeViewComponent\r\n ],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n templateUrl: './modal-treeview.html',\r\n styleUrl: './modal-treeview.scss',\r\n})\r\nexport class ModalTreeviewComponent implements OnInit {\r\n titulo: string = \"Selecionar\";\r\n campoId!: string;\r\n campoPai!: string ;\r\n campoLabel!: string;\r\n @Input() textoPesquisa: string = \"\";\r\n // empresaSelecionadaId: number;\r\n // empresaContabilidadeId: number;\r\n listaArvore: any[] = [];\r\n tipo!: string;\r\n //url da API para pesquisar os itens\r\n url!: string;\r\n //subscriptionClick: Subscription;\r\n subscribeId: string = '';\r\n //função para filtrar registros que podem ser clicados\r\n filterFunction: Predicate<any> | undefined;\r\n //especificos\r\n //planoContas: number;\r\n maximizar: boolean = false;\r\n @ViewChild(\"treeViewComp\") treeView!: TreeViewComponent;\r\n\r\n constructor(\r\n private dataService: DataService,\r\n //public modalCtrl: ModalController,\r\n private injector: Injector,\r\n private loadingCtrl: LoadingController) {\r\n }\r\n ngOnInit(): void {\r\n }\r\n\r\n ionViewDidEnter() {\r\n this.atualizaArvoreEntidade(this.tipo);\r\n }\r\n\r\n async atualizaArvoreEntidade(tipo: string) {\r\n let subscriptionC: Subscription;\r\n this.treeView.cadastro = this.subscribeId;\r\n let loading = await this.showLoading(\"Pesquisando...\", true);\r\n loading.onDidDismiss().then(() => {\r\n subscriptionC?.unsubscribe();\r\n });\r\n\r\n //this.url = this.url.startsWith('http') ? this.url : `${this.BASE_API}/${this.url}`;\r\n\r\n //var url = this.url.replace('<<EMPRESA>>', this.empresaSelecionadaId.toString());\r\n var url = this.url.replace('<<FILTRO>>', '');\r\n // if (this.textoPesquisa) {\r\n // url += `?filtro=${this.textoPesquisa}`;\r\n // }\r\n\r\n subscriptionC = this.dataService.getLista(url).subscribe({\r\n next: (result: any[]) => {\r\n\r\n\r\n /*\r\n empresaContato.forEach((ec) => {\r\n ec.LabelTree = ec.Nome;\r\n ec.EmpresaContatoPaiId = null; //campo ficticio para montar arvore\r\n ec.ClicableTree = true;\r\n });\r\n\r\n this.treeView.campoId = \"EmpresaContatoId\";\r\n this.treeView.campoPai = \"EmpresaContatoPaiId\";\r\n this.treeView.campoLabel = \"LabelTree\";\r\n this.treeView.itens = empresaContato;\r\n this.treeView.arvoreClick(false);\r\n */\r\n\r\n\r\n if (!this.campoPai) {\r\n this.campoPai = `${this.campoId}Pai`;\r\n }\r\n\r\n\r\n result.forEach((cc) => {\r\n cc.LabelTree = cc[this.campoLabel];\r\n if (this.campoPai && !cc[this.campoPai]) {\r\n cc[this.campoPai] = null;\r\n }\r\n\r\n if (this.filterFunction != null) {\r\n const clicable = [{ ...cc }].find(this.filterFunction);\r\n if (clicable != null && cc.ClicableTree == null) {\r\n cc.ClicableTree = true;\r\n } else {\r\n cc.ClicableTree = false;\r\n }\r\n } else {\r\n cc.ClicableTree = true;\r\n }\r\n });\r\n\r\n console.log('tree result', result);\r\n\r\n this.treeView.campoId = this.campoId;\r\n this.treeView.campoPai = this.campoPai;\r\n this.treeView.campoLabel = this.campoLabel;\r\n this.treeView.itens = result;\r\n this.treeView.arvoreClick(false);\r\n\r\n loading.dismiss();\r\n },\r\n error: (error) => {\r\n loading.dismiss();\r\n console.log(\"Erro ao carregar os registros. Tente mais tarde.\");\r\n }\r\n });\r\n\r\n }\r\n\r\n clickRegistro(evento: any) {\r\n console.log('click registro', evento);\r\n if (evento.Id > 0) {\r\n const modalCtrl = this.injector.get(ModalController);\r\n modalCtrl.dismiss({ Id: evento.Id });\r\n }\r\n }\r\n\r\n expandir() {\r\n this.treeView.expandir(); \r\n }\r\n\r\n //utils\r\n async showLoading(msg: string, cancelable: boolean = false): Promise<HTMLIonLoadingElement> {\r\n const loading = await this.loadingCtrl.create({\r\n message: msg,\r\n backdropDismiss: cancelable\r\n //duration: 2000\r\n });\r\n /*\r\n loading.onDidDismiss().then(() => {\r\n console.log('loading dissmissed', request);\r\n if (request.subscription) {\r\n request.subscription.unsubscribe();\r\n }\r\n });\r\n */\r\n await loading.present();\r\n return loading;\r\n\r\n }\r\n\r\n fechar() {\r\n const modalCtrl = this.injector.get(ModalController); \r\n modalCtrl.dismiss()\r\n }\r\n \r\n}\r\n","<ion-header>\n <ion-toolbar color=\"secondary\">\n <ion-title>{{ titulo }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"atualizaArvoreEntidade(tipo)\">\n <ion-icon slot=\"icon-only\" name=\"refresh\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"fechar()\">Fechar</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-item>\n <ion-button style=\"box-shadow: #4c8dff 0px 2px 2px 0.05px;\" fill=\"outline\" (click)=\"expandir()\">\n <ion-icon name=\"expand-outline\"></ion-icon>\n </ion-button> \n </ion-item>\n <kb-tree-view #treeViewComp [campoId]=\"campoId\" [campoPai]=\"campoPai\" [campoLabel]=\"'LabelTree'\" (selecionarRegistro)=\"clickRegistro($event)\"></kb-tree-view>\n </ion-content>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Injector, Input, OnInit, Output, Predicate, Renderer2, ViewChild } from '@angular/core';\r\nimport { IonItem, IonLabel, IonSpinner, IonInput, IonButton, IonIcon, IonList, IonSelect, ModalController } from \"@ionic/angular\";\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { debounceTime, of, Subject, Subscription, switchMap } from 'rxjs';\r\nimport { NgClass } from '@angular/common';\r\nimport { ModalTreeviewComponent } from '../modal-treeview/modal-treeview';\r\nimport { DataService } from '../../entity/services/data.service';\r\n\r\n@Component({\r\n selector: 'kb-input-pesquisa',\r\n imports: [IonList, IonIcon, IonButton, IonInput, IonSpinner, IonLabel, IonItem, NgClass],\r\n templateUrl: './input-pesquisa.html',\r\n styleUrls: ['./input-pesquisa.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputPesquisaComponent,\r\n multi: true, \r\n }]\r\n})\r\nexport class InputPesquisaComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n podePesquisar: boolean = true;\r\n @Input() textoPesquisa: string = '';\r\n private filtro: string = '';\r\n selectElementVisivel: boolean = false;\r\n listaPesquisa: any[] = [];\r\n selectedItem: any;\r\n @Input() override max: string = '30';\r\n private pesquisaSubject: Subject<string> = new Subject();\r\n\r\n @Input() filterFunction: Predicate<any> | undefined;\r\n @Input() selectId: string = 'selectElement';\r\n @Input() campoId: string = 'Id';\r\n @Input() campoPaiId: string = 'PaiId';\r\n @Input() campoDisplay: string = 'Descricao';\r\n @Input() tipo: string = '';\r\n //@ViewChild('selectElement', { read: ElementRef, static: true }) selectElement;\r\n @ViewChild('selectElement', { static: false }) selectElement: IonSelect | undefined;\r\n @ViewChild(\"inputPesquisa\", { read: ElementRef, static: true }) inputPesquisa: ElementRef | undefined;\r\n //@Input() change: Function;\r\n @Output() pesquisaChange = new EventEmitter();\r\n\r\n @Output() limpar = new EventEmitter();\r\n //parametros para chamada API\r\n //endpoint para pesquisa por digitação\r\n @Input() url: string = '';\r\n @Input() urlItem: string = '';\r\n @Input() empresa: number = 0;\r\n @Input() loadInit: boolean = true;\r\n\r\n //endpoint para montar a arvore, se estiver vazia será usado o campo 'url'\r\n @Input() urlTree: string = '';\r\n @Input() treeTitulo: string = '';\r\n\r\n //control value acessor\r\n public data: number | null = null;\r\n private onChange: Function = (data: number) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n modelChanged: Subject<any> = new Subject<any>();\r\n modelChangeSubscription: Subscription;\r\n\r\n writeValue(value: number | null): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n if (value == null || value == 0) {\r\n this.writePesquisa('');\r\n this.selectedItem = null;\r\n } else {\r\n\r\n if (this.loadInit == true) {\r\n this.loadInit = false;\r\n this.carregaItemIdParaLista(value, false);\r\n } else if (!this.selectedItem || (this.selectedItem && this.selectedItem[this.campoId] != value)) {\r\n //console.log('Id diferente'); \r\n this.carregaItemIdParaLista(value, false);\r\n }\r\n /*\r\n if (this.loadInit == true) {\r\n this.loadInit = false;\r\n this.modelChanged.next(value);\r\n //this.carregaItemIdParaLista(value);\r\n } else {\r\n //console.log(this.selectedItem);\r\n if (!this.selectedItem || (this.selectedItem && this.selectedItem[this.campoId] != value)) {\r\n console.log('Id diferente');\r\n this.modelChanged.next(value);\r\n //this.carregaItemIdParaLista(value);\r\n } \r\n }\r\n */\r\n }\r\n\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n constructor(private dataService: DataService,\r\n private renderer: Renderer2,\r\n //private modalCtrl: ModalController,\r\n private injector: Injector\r\n ) {\r\n super();\r\n\r\n this.modelChangeSubscription = this.modelChanged\r\n .pipe(debounceTime(1000)\r\n )\r\n .subscribe(data => {\r\n this.carregaItemIdParaLista(data);\r\n });\r\n }\r\n\r\n onBlur(event: any) {\r\n //console.log('blur', event);\r\n //console.log(event.detail.relatedTarget);\r\n if (event.detail.relatedTarget == null || event.detail.relatedTarget.id.indexOf(this.selectId + 'IonItem') == -1) {\r\n //console.log(\"true\", event.detail.relatedTarget?.id);\r\n //pesquisar item na lista\r\n if (!this.existeNaListaTexto(this.textoPesquisa, true)) {\r\n this.limparClick();\r\n }\r\n\r\n this.dropDownPesquisa(0);\r\n if (this.form != null) {\r\n this.form?.get(this.formControlName)?.markAsTouched();\r\n }\r\n\r\n if (this.classic) {\r\n setTimeout(() => {\r\n this.renderer.removeClass(this.inputPesquisa?.nativeElement, \"item-has-focus\");\r\n }, 200);\r\n }\r\n\r\n this.blur.emit(this.data);\r\n\r\n }\r\n }\r\n\r\n override ngOnInit() {\r\n this.pesquisaSubject.pipe(debounceTime(2000), switchMap((url) => {\r\n //this.console.log('subject url:', url);\r\n if (!!url)\r\n return this.dataService.getLista<any>(url);\r\n else\r\n return of([]);\r\n }))\r\n .subscribe({\r\n next: (result: any) => {\r\n //this.listaPesquisa = result;\r\n //this.console.log('subject subscribe result:', result);\r\n this.listaPesquisa = [];\r\n\r\n if (result && result.length > 0) {\r\n if (this.filterFunction) {\r\n result = result.filter(this.filterFunction);\r\n }\r\n\r\n result.forEach((ent: any, index: any) => {\r\n this.listaPesquisa.push({ ...ent, Index: index, Selected: false });\r\n });\r\n }\r\n\r\n this.podePesquisar = true;\r\n if (this.listaPesquisa.length > 0) {\r\n this.dropDownPesquisa(this.listaPesquisa.length);\r\n }\r\n }, error: (error) => {\r\n this.podePesquisar = true;\r\n //console.log('erro pesquisa', error);\r\n }\r\n });\r\n }\r\n\r\n writePesquisa(value: string | any): void {\r\n //console.log('write pesquisa', value);\r\n this.textoPesquisa = value;\r\n if (value) {\r\n this.filtro = value;\r\n }\r\n }\r\n\r\n showPesquisa(e: any): void {\r\n //console.log('show pesquisa', e.keyCode);\r\n var self = this;\r\n const index = e.target.selectionStart >= 1 ? (e.target.selectionStart - 1) : 0;\r\n //console.log(index, 'valor ', e.target.value, 'char ', e.target.value.charCodeAt(index));\r\n const keyAt = e.target.value.charCodeAt(index);\r\n /*\r\n if ((e.keyCode >= 48 && e.keyCode <= 57) ||\r\n (keyAt >= 48 && keyAt <= 57) ||\r\n (e.keyCode >= 65 && e.keyCode <= 90) ||\r\n (e.keyCode >= 96 && e.keyCode <= 105) ||\r\n (e.keyCode == 8)) \r\n */\r\n\r\n if (e.keyCode == 13) {\r\n //console.log('enter key', e)\r\n //self.selecionarComboClick(e);\r\n self.selecionarComboClick(null);\r\n return;\r\n } else\r\n if (e.keyCode != 40 && e.keyCode != 38) {\r\n if (!self.podePesquisar) {\r\n return;\r\n }\r\n let filtro = self.textoPesquisa;\r\n if (filtro != null && filtro != '' && filtro.length >= 2) {\r\n self.pesquisarEntidade(filtro);\r\n\r\n }\r\n else {\r\n if (e.keyCode == 8 && !filtro) {\r\n this.limparClick();\r\n }\r\n }\r\n }\r\n\r\n else {\r\n if (e.keyCode == 40 || e.keyCode == 38) {\r\n self.dropDownPesquisa(self.listaPesquisa.length);\r\n if (self.selectElementVisivel == true) {\r\n //let select = self.selectElement; //document.getElementById(self.TemplateSelect1Id());\r\n\r\n //ion-list\r\n //selecionado\r\n //console.log(self.listaPesquisa);\r\n let inc = e.keyCode == 40 ? 1 : -1;\r\n let selected = self.listaPesquisa.find(s => s['Selected'] === true);\r\n let cur = 0;\r\n if (selected != null) {\r\n cur = selected['Index'];\r\n //desmarcar o atual\r\n selected['Selected'] = false;\r\n cur = cur + inc;\r\n } else {\r\n cur = 0;\r\n }\r\n\r\n if (cur < 0) {\r\n cur = self.listaPesquisa.length - 1;\r\n } else if (cur >= self.listaPesquisa.length) {\r\n cur = 0;\r\n }\r\n\r\n let novoSelected = self.listaPesquisa.find(n => n['Index'] === cur);\r\n if (novoSelected != null) {\r\n novoSelected['Selected'] = true;\r\n self.selectedItem = novoSelected;\r\n self.textoPesquisa = novoSelected[self.campoDisplay];\r\n }\r\n /*\r\n let select = document.getElementById(this.selectId) as any;\r\n console.log('select Element', select)\r\n if (select != null) {\r\n let inc = e.keyCode == 40 ? 1 : -1;\r\n let cur = select.selectedIndex;\r\n if (cur == NaN) cur = -1;\r\n select.selectedIndex = cur + inc;\r\n if (select.selectedIndex >= 0 && select.selectedIndex < self.listaPesquisa.length) {\r\n self.selectedItem = self.listaPesquisa[select.selectedIndex];\r\n if (self.selectedItem != null) {\r\n self.textoPesquisa = self.selectedItem[self.campoDisplay];\r\n }\r\n }\r\n }\r\n */\r\n }\r\n\r\n } else\r\n if (e.keyCode == 13) {\r\n //console.log('enter key', e)\r\n //self.selecionarComboClick(e);\r\n self.selecionarComboClick(null);\r\n return;\r\n } else if (e.keyCode == 27) {\r\n //ESC\r\n self.dropDownPesquisa(0);\r\n }\r\n }\r\n\r\n }\r\n\r\n highlight(texto: string): string {\r\n let index = texto.toLowerCase().indexOf(this.textoPesquisa.toLowerCase());\r\n //console.log(index);\r\n if (index >= 0) {\r\n return texto.substring(0, index) + '<strong>' + texto.substring(index, index + this.textoPesquisa.length) + '</strong>' + texto.substring(index + this.textoPesquisa.length); //texto.replace(this.textoPesquisa, `<strong>${this.textoPesquisa}</strong>`);\r\n } else {\r\n return texto;\r\n }\r\n }\r\n\r\n selecionarComboClick(item: any, emitChange: boolean = true) {\r\n console.log(item);\r\n var self = this;\r\n this.loadInit = false;\r\n // console.log('combo click', self);\r\n\r\n /*\r\n let select = document.getElementById(this.selectId) as any;\r\n if (select.selectedIndex >= 0) {\r\n self.selectedItem = self.listaPesquisa[select.selectedIndex];\r\n }\r\n console.log('selected', this.selectedItem);\r\n //self.selectedItem = this.listaPesquisa.find(i => i[this.campoId] == e);\r\n if (self.selectedItem != null) {\r\n self.textoPesquisa = self.selectedItem[self.campoDisplay];\r\n self.writeValue(self.selectedItem[self.campoId]);\r\n if (e != null) {\r\n self.selectElementVisivel = false;\r\n if (self.action != null) {\r\n self.action(self.selectedItem(), e);\r\n }\r\n }\r\n }\r\n else {\r\n self.selectElementVisivel = false;\r\n }\r\n */\r\n // pesquisar selecionado\r\n // console.log(this.listaPesquisa);\r\n let selected = this.listaPesquisa.find(s => s['Selected'] === true);\r\n\r\n // if (!selected) {\r\n // console.log(this.campoId, item);\r\n // selected = this.listaPesquisa.filter( s => s[this.campoId] == item[this.campoId]);\r\n // }\r\n\r\n //se o item form passado como parametro (click no ion-item)\r\n if (item != null) {\r\n if (selected != null) {\r\n selected['Selected'] = false;\r\n }\r\n item['Selected'] = true;\r\n selected = item;\r\n }\r\n if (selected != null) {\r\n self.selectedItem = selected;\r\n self.textoPesquisa = selected[self.campoDisplay];\r\n self.writeValue(selected[self.campoId]);\r\n self.selectElementVisivel = false;\r\n //console.log('action', self.change);\r\n if (self.pesquisaChange != null && emitChange) {\r\n //console.log('pesquisaChange selecionarComboClick', item);\r\n self.pesquisaChange.emit(self.selectedItem);\r\n }\r\n } else {\r\n self.selectElementVisivel = false;\r\n }\r\n\r\n console.log('visible', this.selectElementVisivel);\r\n // this.listaPesquisa.forEach( pesquisa => {\r\n // console.log(pesquisa, self.data);\r\n // } );\r\n // console.log(this.textoPesquisa);\r\n }\r\n\r\n selecionarComboChange(e: any) {\r\n var self = this;\r\n //console.log('combo change', e);\r\n self.selectedItem = this.listaPesquisa.find(i => i[this.campoId] == e);\r\n if (self.selectedItem != null) {\r\n self.writeValue(e);\r\n self.textoPesquisa = self.selectedItem[self.campoDisplay];\r\n if (e != null) {\r\n self.selectElementVisivel = false;\r\n if (self.pesquisaChange != null) {\r\n //self.pesquisaChange.emit(self.selectedItem, e);\r\n //console.log('pesquisaChange selecionarComboChange', e);\r\n self.pesquisaChange.emit(self.selectedItem);\r\n }\r\n }\r\n }\r\n else {\r\n self.selectElementVisivel = false;\r\n }\r\n }\r\n\r\n dropDownPesquisa(length: number) {\r\n var self = this;\r\n if (self.listaPesquisa != null && self.listaPesquisa.length > 0) {\r\n if (length == -1) {\r\n length = self.listaPesquisa.length;\r\n }\r\n self.selectElementVisivel = length == 0 ? false : true;\r\n\r\n //console.log(this.selectElement);\r\n //this.selectElement.open();\r\n\r\n /*\r\n //let element = this.selectElement;\r\n let element = document.getElementById(this.selectId);\r\n console.log('dropDown', element);\r\n (element as any).size = length + 1;\r\n if (length == 0) {\r\n self.selectElementVisivel = false;\r\n } else {\r\n self.selectElementVisivel = true;\r\n }\r\n */\r\n }\r\n }\r\n\r\n pesquisarEntidade(filtro: string) {\r\n let url = this.url.replace('<<FILTRO>>', filtro).replace('<<EMPRESA>>', this.empresa.toString());\r\n //console.log('pesquisarEntidade url', url);\r\n this.podePesquisar = false;\r\n this.pesquisaSubject.next(url);\r\n }\r\n\r\n pesquisarEntidadeOld(filtro: string) {\r\n let url = this.url.replace('<<FILTRO>>', filtro).replace('<<EMPRESA>>', this.empresa.toString());\r\n //console.log('pesquisarEntidade url', url);\r\n this.podePesquisar = false;\r\n this.dataService.getLista<any>(url)\r\n .subscribe({\r\n next: (result: any) => {\r\n //this.listaPesquisa = result;\r\n if (this.filterFunction) {\r\n result = result.filter(this.filterFunction);\r\n }\r\n this.listaPesquisa = [];\r\n result.forEach((ent: any, index: any) => {\r\n this.listaPesquisa.push({ ...ent, Index: index, Selected: false });\r\n });\r\n\r\n this.podePesquisar = true;\r\n if (this.listaPesquisa.length > 0) {\r\n this.dropDownPesquisa(this.listaPesquisa.length);\r\n }\r\n }, error: (error: any) => {\r\n console.log('erro pesquisa', error);\r\n this.podePesquisar = true;\r\n }\r\n });\r\n }\r\n\r\n existeNaLista(id: number, setRegistro: boolean = false): boolean {\r\n if (this.listaPesquisa && this.listaPesquisa.length > 0) {\r\n let existe = this.listaPesquisa.find(l => l[this.campoId] === id);\r\n if (existe) {\r\n if (setRegistro) {\r\n this.selectedItem = existe;\r\n this.selecionarComboClick(this.selectedItem);\r\n }\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n existeNaListaTexto(texto: string, setRegistro: boolean = false): boolean {\r\n //console.log(\"existe texto:\", texto, this.campoDisplay, this.listaPesquisa);\r\n if (this.listaPesquisa && this.listaPesquisa.length > 0) {\r\n let existe = this.listaPesquisa.find(l => l[this.campoDisplay].toUpperCase() === texto.toUpperCase());\r\n if (existe) {\r\n if (setRegistro) {\r\n this.selectedItem = existe;\r\n this.selecionarComboClick(this.selectedItem);\r\n }\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n validarItemSelecionado(setarRegistro: boolean = false): boolean {\r\n //console.log('validar selecionado');\r\n //passar pela função de filtro\r\n let valido = false;\r\n if (this.selectedItem) {\r\n if (this.filterFunction) {\r\n let existe = [{ ...this.selectedItem }].filter(this.filterFunction);\r\n if (existe != null && existe.length > 0) {\r\n valido = true;\r\n }\r\n } else {\r\n valido = true;\r\n }\r\n if (valido && setarRegistro) {\r\n this.selecionarComboClick(this.selectedItem);\r\n }\r\n\r\n return valido;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n carregaItemIdParaLista(id: number, emitchange: boolean = true) {\r\n let url = this.urlItem.replace('<<ID>>', id.toString());\r\n //console.log(this.urlItem);\r\n //console.log('pesquisar ID url', url);\r\n this.podePesquisar = false;\r\n this.dataService.getRequest<any>(url)\r\n .subscribe({\r\n next: (result: any) => {\r\n this.listaPesquisa = [];\r\n this.listaPesquisa.push({ ...result, Index: 0, Selected: true });\r\n this.podePesquisar = true;\r\n if (this.listaPesquisa.length > 0) {\r\n this.selectedItem = this.listaPesquisa[0];\r\n //if (emitchange) {\r\n this.selecionarComboClick(this.selectedItem, emitchange);\r\n //}\r\n }\r\n }, error: (error: any) => {\r\n console.log('erro pesquisa', error);\r\n this.podePesquisar = true;\r\n }\r\n });\r\n }\r\n\r\n carregaItemParaLista(item: any) {\r\n if (!item) {\r\n return;\r\n }\r\n this.listaPesquisa = [];\r\n this.listaPesquisa.push({ ...item, Index: 0, Selected: true });\r\n this.podePesquisar = true;\r\n if (this.listaPesquisa.length > 0) {\r\n this.selectedItem = this.listaPesquisa[0];\r\n this.selecionarComboClick(this.selectedItem);\r\n }\r\n }\r\n\r\n limparClick() {\r\n this.writeValue(null);\r\n this.writePesquisa(null);\r\n this.listaPesquisa = [];\r\n this.dropDownPesquisa(0);\r\n //this.podePesquisar = true;\r\n this.pesquisaSubject.next('');\r\n\r\n this.limpar.emit();\r\n\r\n }\r\n\r\n verificarPesquisa() {\r\n //TODO: verificar se o texto corresponde com um item da lista\r\n this.selecionarComboClick(null);\r\n }\r\n\r\n async pesquisarClick() { \r\n const modalCtrl = this.injector.get(ModalController);\r\n const modal = await modalCtrl.create({\r\n component: ModalTreeviewComponent,\r\n componentProps: {\r\n //campoId: this.campoId,\r\n //campoPai: this.campoPaiId,\r\n //campoLabel: this.campoDisplay\r\n textoPesquisa: this.textoPesquisa,\r\n filterFunction: this.filterFunction,\r\n empresaSelecionadaId: this.empresa,\r\n tipo: this.tipo,\r\n\r\n url: this.urlTree ? this.urlTree : this.url,\r\n titulo: this.treeTitulo,\r\n campoLabel: this.campoDisplay,\r\n campoId: this.campoId,\r\n campoPai: this.campoPaiId\r\n },\r\n cssClass: 'my-custom-modal-pesquisa my-custom-modal-background'\r\n });\r\n\r\n modal.onDidDismiss().then(data => {\r\n let result = data['data'];\r\n //console.log(result);\r\n if (result != null && result.Id > 0) {\r\n if (result.Entidade) {\r\n this.carregaItemParaLista(result.Entidade);\r\n } else {\r\n this.carregaItemIdParaLista(result.Id);\r\n }\r\n //this.carregaItemParaLista(result);\r\n }\r\n });\r\n modal.present();\r\n } \r\n\r\n setFocus() {\r\n this.inputPesquisa?.nativeElement.setFocus();\r\n }\r\n\r\n copiarClick() {\r\n try {\r\n console.log(this.inputPesquisa);\r\n const text = this.inputPesquisa?.nativeElement.value; //.options[this.inputPesquisa.nativeElement.selectedIndex].text;\r\n console.log(text);\r\n navigator.clipboard.writeText(text);\r\n //this.utils.showToast('Copiado')\r\n } catch {\r\n\r\n }\r\n }\r\n\r\n //\r\n\r\n entered() {\r\n //adicionar classe ao ion-item, não funcionou\r\n /*\r\n console.log('input focused');\r\n if (this.classic) {\r\n setTimeout(() => {\r\n this.renderer.addClass(this.inputPesquisa?.nativeElement, \"item-has-focus\");\r\n }, 100);\r\n }\r\n */\r\n }\r\n\r\n\r\n}\r\n\r\n","<div style=\"padding-inline-end: 0px;\" [class]=\"{ 'input-text-padding': !classic }\">\n @if (classic) {\n <ion-item lines=\"none\" [style.opacity]=\"readonly ? 0.5 : 1\"\n style=\"--background: inherited; --background-focused: transparent; margin-top: 2px;\"\n [class]=\"itemClass + ' classic'\" id=\"item-pesquisa\" #itemPesquisa>\n @if (label) {\n <ion-label style=\"color: var(--label-palavras);\" position=\"{{ labelPosition }}\">{{ label }}</ion-label>\n }\n <!-- formControlName=\"{{ campo }}\" -->\n @if (!podePesquisar) {\n <ion-spinner style=\"--min-height: 0px !important; margin-inline-end: 5px !important;\" class=\"botao-limpar\"\n slot=\"start\" name=\"lines\"></ion-spinner>\n }\n <!-- (ionBlur)=\"verificarPesquisa()\" -->\n <!-- conflito com click da lista -->\n <ion-input #inputPesquisa type=\"{{type}}\" [placeholder]=\"placeholder\" maxlength=\"{{ max }}\"\n (ionBlur)=\"onBlur($event)\" [value]=\"textoPesquisa\" (input)=\"writePesquisa(inputPesquisa.value)\"\n (keyup)=\"showPesquisa($event)\" autocomplete=\"off\"\n style=\"background-color: var(--input-color); color: var(--text-color);\" (click)=\"dropDownPesquisa(-1)\"\n [disabled]=\"readonly\" debounce=\"2000\" (ionFocus)=\"entered()\"></ion-input>\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\" class=\"botao-limpar\" id=\"btnLimparPesquisa\" fill=\"clear\"\n color=\"medium\" (click)=\"limparClick()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\" class=\"botao-limpar\" fill=\"clear\" color=\"medium\"\n (click)=\"pesquisarClick()\">\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\n </ion-button>\n\n @if (showSeeCopy) {\n <ion-button size=\"small\" slot=\"end\" style=\"margin-top: 27px; margin-inline-start: 4px !important;\" fill=\"clear\"\n color=\"dark\" (click)=\"copiarClick()\" [disabled]=\"!data\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n }\n </ion-item>\n } @else {\n <ion-input #inputPesquisa [type]=\"type\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\"\n [placeholder]=\"placeholder\" maxlength=\"{{ max }}\" (ionBlur)=\"onBlur($event)\" [value]=\"textoPesquisa\"\n (input)=\"writePesquisa(inputPesquisa.value)\" (keyup)=\"showPesquisa($event)\" autocomplete=\"off\" [mode]=\"mode\"\n style=\"background-color: var(--input-color); color: var(--text-color);\" (click)=\"dropDownPesquisa(-1)\"\n [disabled]=\"readonly\" debounce=\"2000\" class=\"modern\" (ionFocus)=\"entered()\">\n\n @if (!podePesquisar) {\n <ion-spinner slot=\"start\" name=\"lines\"></ion-spinner>\n }\n\n <ion-button slot=\"end\" tabindex=\"-1\" class=\"botao-limpar\" id=\"btnLimparPesquisa\" fill=\"clear\" color=\"medium\"\n (click)=\"limparClick()\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n\n <ion-button slot=\"end\" tabindex=\"-1\" class=\"botao-limpar\" fill=\"clear\" color=\"medium\" (click)=\"pesquisarClick()\">\n <ion-icon slot=\"icon-only\" color=\"primary\" name=\"search\"></ion-icon>\n </ion-button>\n\n @if (showSeeCopy) {\n <ion-button slot=\"end\" style=\"margin-top: 27px; margin-inline-start: 4px !important;\" fill=\"clear\" color=\"dark\"\n (click)=\"copiarClick()\" [disabled]=\"!data\">\n <ion-icon slot=\"icon-only\" name=\"copy-outline\"></ion-icon>\n </ion-button>\n }\n </ion-input>\n }\n <ion-list tabindex=\"-1\" [hidden]=\"!selectElementVisivel || !listaPesquisa || listaPesquisa.length == 0\"\n class=\"pesquisa-list\" style=\"max-height: 250px; overflow-y: auto;\">\n\n @for (item of listaPesquisa; track $index) {\n <ion-item tabindex=\"-1\" button (click)=\"selecionarComboClick(item)\" [id]=\"selectId + 'IonItem' + item['Index']\"\n (keyup.enter)=\"selecionarComboClick(item)\" class=\"pesquisa-item\">\n <!-- {{ item | json}} -->\n <span [class]=\"{'selected-item': item['Selected'] === true}\" [innerHTML]=\"highlight(item[campoDisplay])\"></span>\n </ion-item>\n }\n </ion-list>\n\n <!--\n <ion-select interface=\"popover\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\n (ionChange)=\"selecionarComboChange($event.target.value)\">\n <ion-select-option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\n {{ item[campoDisplay] }}\n </ion-select-option>\n </ion-select>\n -->\n\n <!--\n <select [id]=\"selectId\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\n (change)=\"selecionarComboChange($event.target.value)\" class=\"pesquisa-select\">\n <option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\n {{ item[campoDisplay] }}\n </option>\n\n </select>\n -->\n\n @if(form) {\n <div class=\"validation-errors\">\n @for (validation of validation_messages; track validation.type) {\n <ng-container>\n @if(form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\n form.get(formControlName)?.touched)) {\n <div class=\"error-message\" [ngClass]=\"validationClass\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n </div>\n }\n</div>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output, Renderer2, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonLabel, IonTextarea, IonIcon, IonButton } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-input-area',\r\n imports: [IonButton, IonIcon, IonTextarea, IonLabel, IonItem,],\r\n templateUrl: './input-area.html',\r\n styleUrls: ['./input-area.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputAreaComponent,\r\n multi: true\r\n }]\r\n})\r\nexport class InputAreaComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n @Input() linhas: number = 5;\r\n @Input() contador: boolean = false;\r\n @Output() inputChange = new EventEmitter();\r\n\r\n @ViewChild(\"itemArea\", { read: ElementRef }) itemArea: any;\r\n //control value acessor\r\n public data: string | any;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n writeValue(value: string | any): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n constructor(private renderer: Renderer2) {\r\n super();\r\n }\r\n\r\n override ngOnInit() {\r\n\r\n }\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n this.inputChange.emit(valor);\r\n }\r\n\r\n onBlur() {\r\n //remover classe do ion-item\r\n if (this.classic) {\r\n setTimeout(() => {\r\n //this.renderer.addClass(document.getElementById(\"item-select\"), \"item-has-focus\");\r\n this.renderer.removeClass(this.itemArea.nativeElement, \"item-has-focus\");\r\n //console.log('select focused', document.getElementById(\"item-select\"));\r\n }, 200);\r\n }\r\n\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n }\r\n\r\n entered() {\r\n //adicionar classe ao ion-item\r\n // console.log('select focused');\r\n if (this.classic) {\r\n setTimeout(() => {\r\n //this.renderer.addClass(document.getElementById(\"item-select\"), \"item-has-focus\");\r\n this.renderer.addClass(this.itemArea.nativeElement, \"item-has-focus\");\r\n //console.log('select focused', document.getElementById(\"item-select\"));\r\n }, 200);\r\n }\r\n }\r\n\r\n copiarClick() {\r\n let texto = this.data; \r\n navigator.clipboard.writeText(texto); \r\n } \r\n\r\n}\r\n\r\n","<div [class]=\"{ 'input-text-padding': !classic }\">\r\n @if (classic) {\r\n <ion-item lines=\"none\" style=\"--background-focused: transparent;\" [class]=\"itemClass\" #itemArea>\r\n <ion-label position=\"{{ labelPosition }}\">{{ label }}\r\n @if (showObrigatorio) {\r\n <span class=\"label-tip-obrigatorio\">{{\r\n form?.get(formControlName)?.hasError('required') ? ' ●' : ''}}\r\n </span>\r\n }\r\n </ion-label>\r\n <!-- formControlName=\"{{ formControlName }}\" -->\r\n <textarea #inputArea [placeholder]=\"placeholder\" [maxLength]=\"max\" (ionBlur)=\"onBlur()\" [value]=\"data\"\r\n [rows]=\"linhas\" (input)=\"writeValue(inputArea.value)\" [disabled]=\"readonly\" (focus)=\"entered()\"></textarea>\r\n </ion-item>\r\n } @else {\r\n\r\n <ion-textarea #inputArea [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\" [maxlength]=\"max\"\r\n class=\"modern\" [rows]=\"linhas\" (input)=\"writeValue(inputArea.value)\" (ionBlur)=\"onBlur()\"\r\n (ionInput)=\"onInputChange($event)\" [value]=\"data\" mode=\"md\" [counter]=\"contador\" [placeholder]=\"placeholder\">\r\n\r\n @if (icon || iconSrc) {\r\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\r\n }\r\n @if (showSeeCopy) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\r\n (click)=\"copiarClick()\">\r\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n </ion-textarea>\r\n\r\n }\r\n\r\n @if (form) {\r\n <div class=\"validation-errors\">\r\n\r\n @for (validation of validation_messages; track validation.type) {\r\n <ng-container>\r\n @if (form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\r\n form.get(formControlName)?.touched)) {\r\n <div class=\"error-message\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { Observable } from 'rxjs';\r\nimport { IonItem, IonLabel, IonInput, IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'kb-input-cep',\r\n imports: [IonIcon, IonButton, IonInput, IonLabel, IonItem, NgClass],\r\n templateUrl: './input-cep.html',\r\n styleUrls: ['./input-cep.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputCepComponent,\r\n multi: true\r\n }]\r\n})\r\nexport class InputCepComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n\r\n @Input() formato: string | null = '00000-000';\r\n @Input() keyEnter: Function | null = null;\r\n @Output() getResultados = new EventEmitter();\r\n @Output() inputChange = new EventEmitter();\r\n\r\n //control value acessor\r\n public data: string | any = null;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n constructor() {\r\n super();\r\n }\r\n\r\n writeValue(value: string | any): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n override ngOnInit(): void {\r\n }\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n this.inputChange.emit(valor);\r\n }\r\n\r\n digitarFormatado(event: any) {\r\n //console.log(event);\r\n if ((event.keyCode >= 48 && event.keyCode <= 57)\r\n || (event.keyCode >= 96 && event.keyCode <= 105)\r\n || (event.keyCode == 8)\r\n || (event.keyCode == 9)\r\n || (event.keyCode == 39)\r\n || (event.keyCode == 37)\r\n || (event.keyCode == 46)) {\r\n\r\n //console.log(this.formControlName, this.form.get(this.formControlName).value);\r\n\r\n setTimeout(() => {\r\n if (this.form) {\r\n this.form.patchValue({\r\n [this.formControlName]: this.formataCampoValor(this.form.get(this.formControlName)?.value, this.formato ?? '', event)\r\n });\r\n } else {\r\n this.data = this.formataCampoValor(this.data ?? '', this.formato ?? '', event);\r\n this.writeValue(this.data);\r\n }\r\n }, 100);\r\n\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n onKeyEnter() {\r\n if (this.keyEnter != null) {\r\n this.keyEnter();\r\n } else {\r\n if (this.getResultados != null) {\r\n this.pesquisarClick();\r\n }\r\n }\r\n }\r\n\r\n onBlur() {\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n if (this.blur) {\r\n this.blur.emit(this.blurArgs);\r\n }\r\n }\r\n\r\n formataCampoValor(valor: string, Mascara: string, evento: any) {\r\n //console.log(valor);\r\n if (!valor)\r\n return null;\r\n //console.log(evento);\r\n\r\n //if (!this.keypressInteiro(evento))\r\n // return;\r\n\r\n var boleanoMascara;\r\n\r\n var Digitato = evento != null ? evento.keyCode : 0;\r\n let exp = /\\-|\\.|\\/|\\(|\\)| /g\r\n let campoSoNumeros = valor.replace(exp, \"\");\r\n\r\n var posicaoCampo = 0;\r\n var NovoValorCampo = \"\";\r\n var TamanhoMascara = campoSoNumeros.length;;\r\n\r\n if (Digitato != 8) { // backspace \r\n for (let i = 0; i <= TamanhoMascara; i++) {\r\n boleanoMascara = ((Mascara.charAt(i) == \"-\") || (Mascara.charAt(i) == \".\")\r\n || (Mascara.charAt(i) == \"/\"))\r\n boleanoMascara = boleanoMascara || ((Mascara.charAt(i) == \"(\")\r\n || (Mascara.charAt(i) == \")\") || (Mascara.charAt(i) == \" \"))\r\n if (boleanoMascara) {\r\n NovoValorCampo += Mascara.charAt(i);\r\n TamanhoMascara++;\r\n } else {\r\n NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);\r\n posicaoCampo++;\r\n }\r\n }\r\n return NovoValorCampo;\r\n } else {\r\n return valor;\r\n }\r\n }\r\n\r\n pesquisarClick() {\r\n const cep = this.data;\r\n //se não estiver informado o cep, não fazer a pesquisa\r\n if (cep == null || cep == \"\") {\r\n return;\r\n }\r\n\r\n this.getEnderecoPeloCep(cep).subscribe({\r\n next: (result: any) => {\r\n console.log('result CEP', result);\r\n\r\n let cidadePesquisa: string = result.localidade;\r\n cidadePesquisa = this.converteCaracteresEspeciais(cidadePesquisa.toUpperCase());\r\n\r\n if (this.getResultados) {\r\n this.getResultados.emit(result);\r\n }\r\n\r\n }, error: (error: any) => {\r\n console.log(error);\r\n }\r\n });\r\n }\r\n\r\n //substituição de caracteres\r\n converteCaracteresEspeciais(nome: string): string {\r\n var res = nome.replace(/Ã/g, \"A\");\r\n res = res.replace(/Á/g, \"A\");\r\n res = res.replace(/Ç/g, \"C\");\r\n res = res.replace(/É/g, \"E\");\r\n res = res.replace(/Â/g, \"A\");\r\n res = res.replace(/Ô/g, \"O\");\r\n res = res.replace(/Ó/g, \"O\");\r\n res = res.replace(/Ú/g, \"U\");\r\n res = res.replace(/Í/g, \"I\");\r\n return res;\r\n }\r\n\r\n getEnderecoPeloCep(cep: any): Observable<any> {\r\n return new Observable((x) => {\r\n var request = new XMLHttpRequest();\r\n request.open('get', `https://viacep.com.br/ws/${cep}/json/`, true);\r\n request.send();\r\n request.onload = function () {\r\n var data = JSON.parse(this.response);\r\n x.next(data)\r\n }\r\n })\r\n }\r\n}\r\n\r\n","<!--\n<div [formGroup]=\"form\">\n-->\n<!--comando --inner-padding-end: utilizado pra remover padding desnecessários-->\n<div [class]=\"{ 'input-text-padding': !classic }\">\n @if (classic) {\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\"\n [class]=\"itemClass + ' classic'\"\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\n <ion-label [position]=\"labelPosition\">{{ label }}\n @if (showObrigatorio) {\n <span class=\"label-tip-obrigatorio\">{{\n form?.get(formControlName)?.hasError('required') ? ' ●' : ''}}\n </span>\n }\n </ion-label>\n <!-- formControlName={{formControlName}} -->\n <ion-input #inputCep type=\"tel\" [placeholder]=\"placeholder\" [maxlength]=\"max\"\n (keydown)=\"digitarFormatado($event)\" (keyup.enter)=\"onKeyEnter()\" (ionBlur)=\"onBlur()\" [value]=\"data\"\n (input)=\"writeValue(inputCep.value)\" [disabled]=\"readonly\"></ion-input>\n\n <ion-button fill=\"clear\" slot=\"end\" tabindex=\"-1\" color=\"medium\" class=\"btn-show-password\"\n (click)=\"pesquisarClick()\">\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\n </ion-button>\n\n </ion-item>\n } @else {\n <ion-input #inputCep type=\"tel\" [placeholder]=\"placeholder\" [maxlength]=\"max\" [label]=\"label\"\n [labelPlacement]=\"labelPosition\" fill=\"outline\" class=\"modern\" (keydown)=\"digitarFormatado($event)\"\n (keyup.enter)=\"onKeyEnter()\" (ionBlur)=\"onBlur()\" [value]=\"data\" (ionInput)=\"onInputChange($event)\"\n (input)=\"writeValue(inputCep.value)\" [disabled]=\"readonly\">\n\n <ion-button fill=\"clear\" slot=\"end\" tabindex=\"-1\" color=\"medium\" class=\"btn-show-password\"\n (click)=\"pesquisarClick()\">\n <ion-icon color=\"primary\" name=\"search\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-input>\n }\n @if (form) {\n <div class=\"validation-errors\">\n @for (validation of validation_messages; track validation.type) {\n <ng-container>\n @if (form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty\n || form.get(formControlName)?.touched)) {\n <div class=\"error-message\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n </div>\n }\n</div>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonLabel, IonInput, IonIcon, IonButton } from \"@ionic/angular\";\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'kb-input-valor',\r\n imports: [IonButton, IonIcon, IonInput, IonLabel, IonItem, NgClass],\r\n templateUrl: './input-valor.html',\r\n styleUrls: ['./input-valor.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputValorComponent,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputValorComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n @Input() maxValor: number | null = null;\r\n @Output() inputChange = new EventEmitter();\r\n @ViewChild('inputValor', { read: ElementRef, static: true}) inputValorEdit: any;\r\n //control value acessor\r\n public data: string | any;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n writeValue(value: string | any): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n override ngOnInit() { }\r\n\r\n onBlur() {\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n //verificar o valor\r\n if (this.maxValor) {\r\n if (this.form) {\r\n //console.log(this.form.get(this.formControlName).value);\r\n let valor = this.strToFloatZero(this.form?.get(this.formControlName)?.value);\r\n if (valor > this.maxValor) {\r\n this.form.patchValue({\r\n [this.formControlName]: this.converterValorDecimalMil((this.maxValor * 100).toString())\r\n });\r\n }\r\n } else {\r\n let valor = this.strToFloatZero(this.data);\r\n if (valor > this.maxValor) {\r\n this.data = this.converterValorDecimalMil((this.maxValor * 100).toString());\r\n this.writeValue(this.data);\r\n }\r\n }\r\n }\r\n if (this.blur) {\r\n this.blur.emit(this.blurArgs);\r\n }\r\n }\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n this.inputChange.emit(valor);\r\n }\r\n\r\n digitarValor(event: any) {\r\n //this.item.vendaunitario = this.utils.converterValorDecimal(this.item.vendaunitario);\r\n setTimeout(() => {\r\n if (this.form) {\r\n this.form.patchValue({\r\n [this.formControlName]: this.converterValorDecimalMil(this.form.get(this.formControlName)?.value) \r\n });\r\n } else {\r\n this.data = this.converterValorDecimalMil(this.data);\r\n this.writeValue(this.data);\r\n }\r\n }, 100);\r\n\r\n return true;\r\n }\r\n\r\n copiarClick() {\r\n // console.log(this.inputTextEdit.nativeElement);\r\n // console.log(this.inputTextEdit);\r\n let texto = this.data;\r\n navigator.clipboard.writeText(texto);\r\n //this.utils.showToast('Copiado')\r\n }\r\n\r\n isEmpty(str: string | any): boolean {\r\n return str == null || str == undefined || str == '';\r\n }\r\n\r\n converterValorDecimalMil(campo: string, casas: number = 2): string {\r\n if (!this.isEmpty(campo)) {\r\n //console.log('converterValorDecimal');\r\n //console.log('campo:', campo, ' replaced: ', campo.replace(',', '').replace('.', '')); \r\n if (campo == '-') {\r\n return campo;\r\n }\r\n\r\n let valor = parseFloat(campo.replace(',', '').replace('.', '').replace('.', '').replace('.', ''));\r\n\r\n if (isNaN(valor)) {\r\n return '';\r\n }\r\n\r\n let valordiv = parseInt(\"1\" + this.stringOfChar(\"0\", casas));\r\n //valor /= 100; \r\n console.log(valor, '/', valordiv);\r\n valor /= valordiv;\r\n console.log('=', valor);\r\n return this.decimalToStringMil(valor);\r\n /*\r\n var str = valor.toString().replace('.', ',');\r\n var aStr = str.split(',');\r\n if (aStr.length == 1) {\r\n //str += ',00';\r\n str += ',' + this.stringOfChar('0', casas);\r\n }\r\n else {\r\n //str += this.stringOfChar('0', 2 - aStr[1].length);\r\n str += this.stringOfChar('0', casas - aStr[1].length);\r\n }\r\n return str;\r\n */\r\n }\r\n else\r\n return campo;\r\n }\r\n\r\n decimalToStringMil(number?: any) {\r\n if (number != null) {\r\n if (number == 0 || number == '0') {\r\n return '0,00';\r\n }\r\n //console.log(number);\r\n let numero = number.toFixed(2).split('.');\r\n numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.');\r\n return numero.join(',').replace('-.', '-');\r\n } else\r\n return '';\r\n }\r\n\r\n stringOfChar(str: string, tam: number): string {\r\n var res = '';\r\n for (var i = 0; i < tam; i++) {\r\n res += str;\r\n }\r\n return res;\r\n }\r\n\r\n strToFloatZero(str: any): number {\r\n if (Number.isFinite(str))\r\n return str;\r\n if (this.isEmpty(str))\r\n return 0;\r\n else\r\n return parseFloat(str.replace('.', '').replace(',', '.'));\r\n }\r\n\r\n setFocus() {\r\n this.inputValorEdit.nativeElement.setFocus();\r\n }\r\n}\r\n\r\n","<!--\n<div [formGroup]=\"form\">\n-->\n<div [class]=\"{ 'input-text-padding': !classic }\">\n @if (classic) {\n <ion-item lines=\"none\" style=\"--background-focused: transparent;\" [class]=\"itemClass\"\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\n <ion-label position=\"{{ labelPosition }}\">{{ label }}\n @if (showObrigatorio) {\n <span class=\"label-tip-obrigatorio\">{{\n form?.get(formControlName)?.hasError('required') ? ' ●' : ''}}\n </span>\n }\n </ion-label>\n <!-- formControlName=\"{{ formControlName }}\" -->\n <ion-input #inputValor type=\"text\" [placeholder]=\"placeholder\" maxlength=\"{{ max }}\" (ionBlur)=\"onBlur()\"\n [value]=\"data\" (input)=\"writeValue(inputValor.value)\" (keypress)=\"digitarValor($event)\"\n [clearInput]=\"botaoLimpar\" [disabled]=\"readonly\"></ion-input>\n </ion-item>\n } @else {\n <ion-input #inputValor type=\"text\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\"\n [placeholder]=\"placeholder\" class=\"modern\" [maxlength]=\"max\" (ionBlur)=\"onBlur()\" [value]=\"data\"\n (input)=\"writeValue(inputValor.value)\" (keypress)=\"digitarValor($event)\" (ionInput)=\"onInputChange($event)\"\n mode=\"md\" [clearInput]=\"botaoLimpar\" [disabled]=\"readonly\">\n @if (icon || iconSrc) {\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\n }\n @if (showSeeCopy) {\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\n (click)=\"copiarClick()\">\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\n </ion-button>\n\n }\n\n </ion-input>\n }\n\n @if (form) {\n <div class=\"validation-errors\">\n @for (validation of validation_messages; track validation.type) {\n <ng-container>\n @if (form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\n form.get(formControlName)?.touched)) {\n <div class=\"error-message\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n </div>\n }\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonCheckbox } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-input-checkbox',\r\n imports: [IonCheckbox, IonItem, ],\r\n templateUrl: './input-checkbox.html',\r\n styleUrls: ['./input-checkbox.scss', './../baseInputComponent.scss'],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputCheckboxComponent,\r\n multi: true\r\n }]\r\n})\r\nexport class InputCheckboxComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n\r\n @Input() justify: string = \"start\";\r\n @Input() labelPlacement: string = \"end\";\r\n //control value acessor\r\n public data!: boolean | undefined;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n writeValue(value?: any): void {\r\n console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n constructor() {\r\n super();\r\n }\r\n\r\n \r\n\r\n override ngOnInit(): void {\r\n }\r\n}\r\n","<div [class]=\"{ 'input-text-padding': !classic }\">\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; padding-right: 0px; --background-hover: transparent\" [class]=\"itemClass\">\n <ion-checkbox #inputCheck\n [labelPlacement]=\"labelPlacement\" [justify]=\"justify\" \n [disabled]=\"readonly\"\n [checked]=\"data\"\n [color]=\"labelColor ?? 'primary'\" \n (ionChange)=\"writeValue(inputCheck.checked)\">\n <span [style.color]=\"labelColor ?? 'auto'\">{{ label }}</span> \n </ion-checkbox>\n </ion-item>\n</div>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonLabel, IonInput, IonIcon } from \"@ionic/angular\";\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'kb-input-format',\r\n imports: [IonIcon, IonInput, IonLabel, IonItem, NgClass],\r\n templateUrl: './input-format.html',\r\n styleUrls: ['./input-format.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputFormatComponent,\r\n multi: true\r\n }]\r\n})\r\nexport class InputFormatComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n\r\n @Input() formato: string | null = null;\r\n @Input() keyEnter = new EventEmitter();\r\n @Output() inputChange = new EventEmitter();\r\n @ViewChild('inputFormat', { read: ElementRef, static: true }) inputFormatEdit: any;\r\n\r\n //control value acessor\r\n public data: string | any = null;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n writeValue(value: string | any): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n override ngOnInit() { }\r\n\r\n digitarFormatado(event: any) {\r\n //console.log(event);\r\n const index = event.target.selectionStart >= 1 ? (event.target.selectionStart - 1) : 0;\r\n const keyAt = event.target.value.charCodeAt(index);\r\n if ((event.keyCode >= 48 && event.keyCode <= 57)\r\n || (keyAt >= 48 && keyAt <= 57)\r\n || (event.keyCode >= 96 && event.keyCode <= 105)\r\n || (event.keyCode == 8)\r\n || (event.keyCode == 9)\r\n || (event.keyCode == 39)\r\n || (event.keyCode == 37)\r\n || (event.keyCode == 46)) {\r\n\r\n //console.log(this.formControlName, this.form.get(this.formControlName).value);\r\n\r\n setTimeout(() => {\r\n if (this.form) {\r\n this.form.patchValue({\r\n [this.formControlName]: this.formataCampoValor(this.form.get(this.formControlName)?.value, this.formato ?? '', event)\r\n });\r\n } else {\r\n this.data = this.formataCampoValor(this.data ?? '', this.formato ?? '', event);\r\n this.writeValue(this.data);\r\n }\r\n }, 100);\r\n\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n this.inputChange.emit(valor);\r\n }\r\n\r\n\r\n onKeyEnter() {\r\n if (this.keyEnter != null) {\r\n this.keyEnter.emit();\r\n }\r\n }\r\n\r\n onBlur() {\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n if (this.blur) {\r\n this.blur.emit(this.blurArgs);\r\n }\r\n }\r\n\r\n setFocus() {\r\n this.inputFormatEdit.nativeElement.setFocus();\r\n }\r\n\r\n formataCampoValor(valor: string, Mascara: string, evento: any) {\r\n console.log(valor);\r\n if (!valor)\r\n return null;\r\n //console.log(evento);\r\n\r\n //if (!this.keypressInteiro(evento))\r\n // return;\r\n\r\n var boleanoMascara;\r\n\r\n var Digitato = evento != null ? evento.keyCode : 0;\r\n let exp = /\\-|\\.|\\/|\\(|\\)| /g\r\n let campoSoNumeros = valor.replace(exp, \"\");\r\n\r\n var posicaoCampo = 0;\r\n var NovoValorCampo = \"\";\r\n var TamanhoMascara = campoSoNumeros.length;;\r\n\r\n if (Digitato != 8) { // backspace \r\n for (let i = 0; i <= TamanhoMascara; i++) {\r\n boleanoMascara = ((Mascara.charAt(i) == \"-\") || (Mascara.charAt(i) == \".\")\r\n || (Mascara.charAt(i) == \"/\"))\r\n boleanoMascara = boleanoMascara || ((Mascara.charAt(i) == \"(\")\r\n || (Mascara.charAt(i) == \")\") || (Mascara.charAt(i) == \" \"))\r\n if (boleanoMascara) {\r\n NovoValorCampo += Mascara.charAt(i);\r\n TamanhoMascara++;\r\n } else {\r\n NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);\r\n posicaoCampo++;\r\n }\r\n }\r\n return NovoValorCampo;\r\n } else {\r\n return valor;\r\n }\r\n }\r\n}\r\n\r\n","<!--\n<div [formGroup]=\"form\">\n-->\n<!--comando --inner-padding-end: utilizado pra remover padding desnecessários-->\n<div [class]=\"{ 'input-text-padding': !classic }\">\n @if (classic) {\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\"\n [class]=\"itemClass + ' classic'\"\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\n <ion-label [position]=\"labelPosition\">{{ label }}\n @if (showObrigatorio) {\n <span class=\"label-tip-obrigatorio\">{{\n form?.get(formControlName)?.hasError('required') ? ' ●' : ''}}\n </span>\n }\n </ion-label>\n <!-- formControlName={{formControlName}} -->\n <ion-input #inputFormat type=\"tel\" [placeholder]=\"placeholder\" maxlength=\"{{ max }}\"\n (keydown)=\"digitarFormatado($event)\" (keyup.enter)=\"onKeyEnter()\" (ionBlur)=\"onBlur()\" [value]=\"data\"\n (input)=\"writeValue(inputFormat.value)\" [disabled]=\"readonly\"></ion-input>\n\n </ion-item>\n } @else {\n <ion-input #inputFormat type=\"tel\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\" \n [placeholder]=\"placeholder\" class=\"modern\" maxlength=\"{{ max }}\" \n [value]=\"data\" mode=\"md\"\n (input)=\"writeValue(inputFormat.value)\" \n (ionInput)=\"onInputChange($event)\" \n (ionBlur)=\"onBlur()\" \n (keydown)=\"digitarFormatado($event)\"\n (keyup.enter)=\"onKeyEnter()\" \n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake-modern' : '' \"\n [disabled]=\"readonly\" [shape]=\"shape\">\n\n @if (icon || iconSrc) {\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\n }\n </ion-input>\n\n }\n\n @if (form) {\n <div class=\"validation-errors\">\n @for (validation of validation_messages; track validation.type) {\n <ng-container>\n @if (form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\n form.get(formControlName)?.touched)) {\n <div class=\"error-message\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n </div>\n }\n</div>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output, Renderer2, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { IonItem, IonLabel, IonButton, IonIcon, IonSelect, IonSelectOption } from \"@ionic/angular\";\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'kb-input-select',\r\n imports: [IonIcon, IonButton, IonLabel, IonItem, IonSelect, IonSelectOption, NgClass],\r\n templateUrl: './input-select.html',\r\n styleUrls: ['./input-select.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputSelectComponent,\r\n multi: true,\r\n }\r\n ]\r\n})\r\nexport class InputSelectComponent extends BaseInputComponent\r\n implements OnInit, ControlValueAccessor {\r\n\r\n @Output() selectChange = new EventEmitter(); //: Function;\r\n @Output() selectChangeEntity = new EventEmitter(); //: Function;\r\n @Input() itens: any[] = [];\r\n @Input() itemId: string = \"Id\";\r\n @Input() itemNome: string = \"Nome\";\r\n @Input() showNovo: boolean = false;\r\n @Input() itemNull: boolean = true;\r\n @Input() opcaoDefault: string = 'Selecionar';\r\n @Input() interface: 'action-sheet' | 'popover' | 'alert' = 'popover';\r\n\r\n @ViewChild(\"itemSelect\", { read: ElementRef }) itemSelect: any;\r\n @ViewChild(\"inputSelect\", { read: ElementRef }) inputSelect: any;\r\n\r\n\r\n //control value acessor\r\n public data!: string;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n\r\n writeValue(value: string | any | null): void {\r\n //console.log('write value select', value, this.itens, value == null);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n\r\n constructor(private renderer: Renderer2 \r\n ) {\r\n super();\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n }\r\n\r\n onSelectChange(value: any) {\r\n console.log('select change', value);\r\n this.writeValue(value == '' ? null : value);\r\n if (this.selectChange != null) {\r\n //console.log('emit', value);\r\n this.selectChange.emit(value);\r\n }\r\n if (this.selectChangeEntity != null) {\r\n const existe = this.itens.find(i => i[this.itemId] == value);\r\n this.selectChangeEntity.emit(existe);\r\n }\r\n }\r\n\r\n onBlur() {\r\n //console.log('input select blur')\r\n //document.getElementById(\"item-select\").classList.remove(\"item-has-focus\");\r\n setTimeout(() => {\r\n //this.renderer.addClass(document.getElementById(\"item-select\"), \"item-has-focus\");\r\n this.renderer.removeClass(this.itemSelect.nativeElement, \"item-has-focus\");\r\n //console.log('select focused', document.getElementById(\"item-select\"));\r\n }, 200);\r\n\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n }\r\n\r\n entered() {\r\n //adicionar classe ao ion-item, não funcionou\r\n // console.log('select focused');\r\n setTimeout(() => {\r\n //this.renderer.addClass(document.getElementById(\"item-select\"), \"item-has-focus\");\r\n this.renderer.addClass(this.itemSelect.nativeElement, \"item-has-focus\");\r\n //console.log('select focused', document.getElementById(\"item-select\"));\r\n }, 200);\r\n\r\n }\r\n\r\n copiarClick() {\r\n try {\r\n console.log(this.inputSelect);\r\n const text = this.inputSelect.nativeElement.options[this.inputSelect.nativeElement.selectedIndex].text;\r\n console.log(text);\r\n navigator.clipboard.writeText(text);\r\n //this.utils.showToast('Copiado')\r\n } catch {\r\n\r\n }\r\n }\r\n}\r\n\r\n","<!--\n<div [formGroup]=\"form\">\n [style.opacity]=\"readonly ? 0.5 : 1\"\n [color]=\"labelColor\"\n-->\n<div [class]=\"{ 'input-text-padding': !classic }\">\n @if(classic) {\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent;\"\n [class]=\"itemClass + ' classic'\" id=\"item-select\" #itemSelect\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\n @if (label) {\n <ion-label style=\"color: var(--input-label-color);\" [position]=\"labelPosition\" class=\"label-color\">{{ label\n }}</ion-label>\n }\n <!-- formControlName=\"{{ formControlName }}\" -->\n <select [tabindex]=\"tabindex\" #inputSelect\n style=\"background-color: var(--input-color); color: var(--input-text-color); width: 100%;\"\n (change)=\"onSelectChange(inputSelect.value)\" (blur)=\"onBlur()\" [disabled]=\"readonly\" (focus)=\"entered()\">\n @if (itemNull) {\n <option [value]=\"''\" selected=\"true\">{{ opcaoDefault }}</option>\n }\n @for(item of itens; track item[itemId]) {\n <option [value]=\"item[itemId]\" [selected]=\"item[itemId] == data\">{{ item[itemNome] }}\n </option>\n }\n </select>\n @if(showSeeCopy) {\n <ion-button size=\"small\" slot=\"end\" style=\"margin-top: 27px; margin-inline-start: 4px !important;\" fill=\"clear\"\n color=\"dark\" (click)=\"copiarClick()\" [disabled]=\"!data\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n }\n </ion-item>\n } @else {\n\n <ion-select aria-label=\"Fruit\" [interface]=\"interface\" [placeholder]=\"placeholder\" [fill]=\"fill\"\n [labelPlacement]=\"labelPosition\" [label]=\"label\" [disabled]=\"readonly\" [value]=\"data\" [mode]=\"mode\"\n (ionChange)=\"onSelectChange($event.detail.value)\">\n @if (icon) {\n <ion-icon slot=\"start\" [icon]=\"icon\" aria-hidden=\"true\"></ion-icon>\n }\n @if (itemNull) {\n <ion-select-option [value]=\"''\" selected=\"true\">{{ opcaoDefault }}</ion-select-option>\n }\n @for(item of itens; track item[itemId]) {\n <ion-select-option [value]=\"item[itemId]\">{{ item[itemNome] }}\n </ion-select-option>\n }\n @if (showSeeCopy) {\n <ion-button fill=\"clear\" slot=\"end\" (click)=\"copiarClick()\">\n <ion-icon slot=\"icon-only\" name=\"copy-outline\" aria-hidden=\"true\"></ion-icon>\n </ion-button>\n }\n </ion-select>\n\n\n }\n\n @if (form) {\n <div class=\"validation-errors\">\n @for(validation of validation_messages; track validation.type) {\n <ng-container>\n @if(form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\n form.get(formControlName)?.touched)) {\n <div class=\"error-message\" [ngClass]=\"validationClass\">\n &#8226; {{ validation.message }}\n </div>\n }\n </ng-container>\n }\n </div>\n }\n</div>","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { IonItem, IonRadioGroup, IonRow, IonCol, IonRadio } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-input-radio',\r\n imports: [IonRadio, IonCol, IonRow, IonRadioGroup, IonItem, ],\r\n templateUrl: './input-radio.html',\r\n styleUrls: ['./input-radio.scss', './../baseInputComponent.scss'],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputRadioComponent,\r\n multi: true\r\n }]\r\n})\r\nexport class InputRadioComponent extends BaseInputComponent implements OnInit, ControlValueAccessor {\r\n /**\r\n * Array de objetos { itemId, itemNome }\r\n */\r\n @Input() itens: any[] = [];\r\n @Input() itemId: string = \"Id\";\r\n @Input() itemNome: string = \"Nome\";\r\n @Input() color: string = \"primary\";\r\n //control value acessor\r\n public data!: string | undefined;\r\n private onChange: Function = (data: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n writeValue(value?: any): void {\r\n //console.log('write value', value);\r\n this.onChange(value);\r\n this.data = value;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n constructor() {\r\n super();\r\n }\r\n\r\n override ngOnInit(): void {\r\n }\r\n\r\n\r\n}\r\n\r\n","<div>\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; padding-right: 0px;\" [class]=\"itemClass\"\n [style.opacity]=\"readonly ? '0.5' : '1'\">\n <ion-radio-group #inputRadio \n [value]=\"data\"\n (ionChange)=\"writeValue(inputRadio.value)\">\n <span style=\"font-size: 13px\">\n {{ label }}\n </span>\n <ion-row>\n <ion-col *ngFor=\"let item of itens\">\n <ion-radio style=\"margin-right: 12px;\" [color]=\"color\" \n labelPlacement=\"end\" \n justify=\"start\"\n [disabled]=\"readonly\"\n [value]=\"item[itemId]\">\n {{ item[itemNome] }}</ion-radio><br />\n </ion-col>\n </ion-row>\n </ion-radio-group>\n </ion-item>\n</div>","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\r\nimport { IonRow, IonCol, IonLabel, IonButton, IonList, IonListHeader, IonIcon } from \"@ionic/angular\";\r\n//import { InputAreaComponent, InputCepComponent, InputCheckboxComponent, InputFormatComponent, InputPesquisaComponent, InputRadioComponent, InputSelectComponent, InputTextComponent, InputValorComponent } from '../public-api';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { InputPesquisaComponent } from '../input-pesquisa/input-pesquisa';\r\nimport { InputTextComponent } from '../input-text/input-text';\r\nimport { InputAreaComponent } from '../input-area/input-area';\r\nimport { InputCepComponent } from '../input-cep/input-cep';\r\nimport { InputValorComponent } from '../input-valor/input-valor';\r\nimport { InputCheckboxComponent } from '../input-checkbox/input-checkbox';\r\nimport { InputFormatComponent } from '../input-format/input-format';\r\nimport { InputSelectComponent } from '../input-select/input-select';\r\nimport { InputRadioComponent } from '../input-radio/input-radio';\r\nimport { BaseModel } from '../../lib/model/base-model';\r\nimport { HtmlRow } from '../../lib/model/html-row';\r\n\r\n@Component({\r\n selector: 'kb-entidade-edit',\r\n imports: [IonIcon, IonListHeader, IonList, IonButton, IonLabel, IonCol, IonRow, InputTextComponent, \r\n InputPesquisaComponent, InputAreaComponent, InputCepComponent, InputValorComponent, InputCheckboxComponent,\r\n InputFormatComponent, InputSelectComponent, InputRadioComponent,\r\n FormsModule, ReactiveFormsModule],\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n templateUrl: './entity-edit.html',\r\n styleUrls: ['./entity-edit.scss'],\r\n})\r\nexport class EntityEditComponent<T extends BaseModel> implements OnInit{\r\n \r\n @Input() entidade!: T | null;\r\n //entidade: any;\r\n /**\r\n * Vai receber montado do base cadastro\r\n */\r\n @Input() campos: HtmlRow[] = [];\r\n @Input() entidadeForm!: FormGroup;\r\n @Input() validation_messages: any;\r\n @Input() itemClass: string = \"\";\r\n @Input() rowClass: string = \"\";\r\n @Input() showObrigatorio: boolean = false;\r\n\r\n ngOnInit(): void {\r\n \r\n }\r\n\r\n emptyHandler() {\r\n\r\n }\r\n}\r\n","<div>\n @if (campos && campos.length) {\n <form [formGroup]=\"entidadeForm\" style=\"width: 100%;\">\n\n @for (linha of campos; track linha.Linha) {\n <ion-row [class]=\"rowClass\">\n @for (campo of linha.Linha; track campo.Nome) {\n <ng-container>\n <!-- {{ campo.Nome }} {{ campo.Tipo }} -->\n\n <!-- [showCustomAction]=\"campo.InputAction ?? false\" [customActionIcon]=\"campo.InputActionIcon ?? 'search-outline'\" -->\n @if (campo.Tipo == 'input-text') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-text label=\"{{campo.Label ?? campo.Nome}}\"\n [placeholder]=\"campo.PlaceHolderVisivel ? (campo.PlaceHolder ? campo.PlaceHolder : (campo.Label ?? campo.Nome + '...')) : ''\" \n [form]=\"entidadeForm\"\n [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\"\n [type]=\"campo.TipoInput ?? 'text'\" [showSeePassword]=\"campo.TipoInput == 'password'\" \n (customActionClick)=\"campo.click ? campo.click($event) : emptyHandler()\" [itemClass]=\"itemClass\"\n [showObrigatorio]=\"showObrigatorio\">\n </kb-input-text>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-date') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-text label=\"{{campo.Label ?? campo.Nome}}\"\n [form]=\"entidadeForm\"\n [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\"\n type=\"date\" \n (customActionClick)=\"campo.click ? campo.click($event) : emptyHandler()\" [itemClass]=\"itemClass\"\n [showObrigatorio]=\"showObrigatorio\">\n </kb-input-text>\n </ion-col> \n } \n @else if (campo.Tipo == 'input-number') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-text label=\"{{campo.Label ?? campo.Nome}}\"\n [placeholder]=\"campo.PlaceHolderVisivel ? (campo.PlaceHolder ? campo.PlaceHolder : (campo.Label ?? campo.Nome + '...')) : ''\" \n [form]=\"entidadeForm\"\n [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\"\n type=\"number\" \n (customActionClick)=\"campo.click ? campo.click($event) : emptyHandler()\" [itemClass]=\"itemClass\"\n [showObrigatorio]=\"showObrigatorio\">\n </kb-input-text>\n </ion-col>\n \n }\n @else if (campo.Tipo == 'input-area') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-area label=\"{{campo.Label ?? campo.Nome}}\"\n [placeholder]=\"campo.PlaceHolderVisivel ? (campo.PlaceHolder ? campo.PlaceHolder : (campo.Label ?? campo.Nome + '...')) : ''\" \n [form]=\"entidadeForm\"\n [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\"\n [linhas]=\"campo.Linhas ?? 5\" [itemClass]=\"itemClass\" [showObrigatorio]=\"showObrigatorio\">\n </kb-input-area>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-cep') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-cep label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\" [itemClass]=\"itemClass\"\n [showObrigatorio]=\"showObrigatorio\" (getResultados)=\"campo.change ? campo.change($event) : emptyHandler()\">\n </kb-input-cep>\n </ion-col>\n }\n @else if(campo.Tipo == 'input-valor') {\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"\" [hidden]=\"campo.Hidden === true\">\n <kb-input-valor label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\" [itemClass]=\"itemClass\"\n [showObrigatorio]=\"showObrigatorio\">\n </kb-input-valor>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-checkbox') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-checkbox label=\"{{ campo.Label }}\" [form]=\"entidadeForm\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\" [itemClass]=\"itemClass\"\n [labelColor]=\"campo.BtnColor ?? 'dark'\">\n\n </kb-input-checkbox>\n </ion-col>\n }\n @else if(campo.Tipo == 'input-format') {\n\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-format label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco ?? ''\" [readonly]=\"campo.ReadOnly\" [formato]=\"campo.Formato ?? ''\"\n [itemClass]=\"itemClass\" [showObrigatorio]=\"showObrigatorio\">\n </kb-input-format>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-select') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-select [label]=\"campo.Label ?? campo.Nome\" [placeholder]=\"'Selecionar...'\"\n [formControlName]=\"campo.Nome\" [form]=\"entidadeForm\" [itens]=\"campo.Itens!\" [itemId]=\"campo.ItemId ?? 'Id'\"\n [itemNome]=\"campo.ItemNome ?? 'Nome'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n (selectChangeEntity)=\"campo.change ? campo.change($event) : emptyHandler()\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\" [showObrigatorio]=\"showObrigatorio\">\n </kb-input-select>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-radio') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-radio [label]=\"campo.Label ?? campo.Nome\" [formControlName]=\"campo.Nome\" [form]=\"entidadeForm\"\n [itens]=\"campo.Itens!\" [itemId]=\"campo.ItemId ?? 'Id'\" [itemNome]=\"campo.ItemNome ?? 'Nome'\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\">\n </kb-input-radio>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-pesquisa') {\n <ion-col [sizeMd]=\"campo.Size\" [hidden]=\"campo.Hidden === true\">\n <kb-input-pesquisa #pesquisaCentroCustoPai [label]=\"campo.Label ?? campo.Nome\" [campoId]=\"campo.ItemId ?? 'Id'\"\n [focusField]=\"campo.focusField ?? false\" [formControlName]=\"campo.Nome\" \n [placeholder]=\"campo.PlaceHolderVisivel ? (campo.PlaceHolder ? campo.PlaceHolder : ('Pesquisar...')) : ''\"\n [campoDisplay]=\"campo.ItemNome ?? 'Nome'\" [form]=\"entidadeForm\" [tipo]=\"campo.TipoPesquisa ?? ''\"\n [urlItem]=\"campo.UrlItem ?? ''\" [max]=\"campo.Tamanho ?? '50'\" [url]=\"campo.UrlPesquisa ?? ''\"\n [readonly]=\"campo.ReadOnly\" (pesquisaChange)=\"campo.change ? campo.change($event) : emptyHandler()\"\n [itemClass]=\"itemClass\" [showObrigatorio]=\"showObrigatorio\">\n </kb-input-pesquisa>\n </ion-col>\n }\n @else if (campo.Tipo == 'input-button') {\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"\">\n <!-- \n <kb-btn-action [title]=\"campo.Label\" [icon]=\"campo.Icon\" [iconSrc]=\"campo.IconSrc\" [color]=\"campo.BtnColor ?? 'light'\" \n [expand]=\"campo.BtnExpand ?? 'block'\" style=\"margin-top: var(--btn-action-margin-top, auto);\">\n </kb-btn-action>\n -->\n <ion-button [expand]=\"campo.BtnExpand ?? 'block'\" [color]=\"campo.BtnColor ?? 'light'\"\n (click)=\"campo.click ? campo.click($event) : emptyHandler()\" [size]=\"campo.BtnSize ?? 'default'\"\n [disabled]=\"campo.ReadOnly\">\n <ion-icon *ngIf=\"campo.Icon || campo.IconSrc\" [name]=\"campo.Icon\" [src]=\"campo.IconSrc\"></ion-icon>\n {{ campo.Label }}\n </ion-button>\n </ion-col>\n }\n @else if (campo.Tipo == 'col') {\n <ion-col *ngIf=\"campo.Tipo == 'col'\" size-md=\"1\" size-xs=\"0\">\n\n </ion-col>\n }\n @else if (campo.Tipo == 'sub-titulo') {\n <ion-col *ngIf=\"\" size=\"12\">\n <ion-list lines=\"none\" class=\"ion-no-padding\">\n <ion-list-header color=\"primary\" [style]=\"campo.CampoStyle ?? ''\">\n <ion-label [style]=\"campo.LabelStyle ?? ''\">{{ campo.Label }}</ion-label>\n </ion-list-header>\n </ion-list>\n </ion-col>\n }\n </ng-container>\n }\n </ion-row>\n }\n <!--\n <ion-col class=\"select ion-no-margin ion-no-padding\">\n <ion-item lines=\"none\">\n <ion-label>Totalizador</ion-label>\n <ion-checkbox slot=\"start\" formControlName=\"Totalizador\"></ion-checkbox>\n </ion-item>\n </ion-col>\n <ion-col class=\"select ion-no-margin ion-no-padding\">\n <ion-item lines=\"none\">\n <ion-label>Inativo</ion-label>\n <ion-checkbox slot=\"start\" formControlName=\"Inativo\"></ion-checkbox>\n </ion-item>\n </ion-col>\n -->\n </form>\n }\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { IonRow, IonCol, IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DatePipe, DecimalPipe } from '@angular/common';\r\nimport { GridColuna, GridTabela } from '../../lib/model/grid-tabela';\r\nimport { LibService } from '../../lib/services/lib.service';\r\nimport { SafeHtmlPipe } from '../../lib/pipes/safe-html.pipe';\r\n\r\n@Component({\r\n selector: 'kb-grid-view',\r\n imports: [IonIcon, IonButton, IonCol, IonRow, FormsModule, DatePipe, DecimalPipe, SafeHtmlPipe],\r\n templateUrl: './grid-view.html',\r\n styleUrl: './grid-view.scss',\r\n changeDetection: ChangeDetectionStrategy.Eager\r\n})\r\nexport class GridViewComponent implements OnInit, OnChanges {\r\n @Input() tabelaCampos!: GridTabela;\r\n @Input() dataSet: any[] = [];\r\n @Input() minHeight: string = '400px';\r\n @Input() maxHeight: string = '600px';\r\n @Input() inMemoryPagination: boolean = false;\r\n @Input() apiPagination: boolean = false;\r\n\r\n @Input() filteredDataSet: any[] = [];\r\n\r\n @Output() selecionarItem = new EventEmitter();\r\n @Output() excluirItem = new EventEmitter();\r\n @Output() selecionarChecked = new EventEmitter();\r\n\r\n selectedItem: any;\r\n //inputs = inject(new InjectionToken<any>('title inputs'));\r\n grupos: any[] = [{ Coluna: '', Tabela: null, Dados: null, Nivel: 0 }];\r\n\r\n // tabelaCampos = {\r\n // Selecionar: false,\r\n // Exportar: true,\r\n // Colunas: [\r\n // { Campo: 'Id', Titulo: 'Id', Tamanho: '10%', Ordem: true, Grupo: false, Filtrar: true, OrdemStatus: 0, Tipo: 'number', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },\r\n // { Campo: 'Marca', Titulo: 'Marca', Tamanho: '25%', Ordem: true, Grupo: true, Filtrar: true, OrdemStatus: 0, Tipo: 'string', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },\r\n // { Campo: 'Descricao', Titulo: 'Descrição', Tamanho: '25%', Ordem: true, Grupo: true, Filtrar: true, OrdemStatus: 0, Tipo: 'string', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },\r\n // { Campo: 'Data', Titulo: 'Data', Tamanho: '20%', Ordem: true, Grupo: true, Filtrar: true, OrdemStatus: 0, Tipo: 'date', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },\r\n // { Campo: 'Valor', Titulo: 'Valor', Tamanho: '20%', Ordem: true, Grupo: false, Filtrar: true, OrdemStatus: 0, Tipo: 'number', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },\r\n // ]\r\n // }\r\n\r\n // dataSet: Array<any> = [\r\n // { Id: 1, Marca: 'Apple', Descricao: 'IPhone 14', Data: '2023-05-01', Valor: 7899.99 },\r\n // { Id: 2, Marca: 'Apple', Descricao: 'MacBook Pro', Data: '2023-06-01', Valor: 17999.99 },\r\n // { Id: 3, Marca: 'Samsung', Descricao: 'Galaxy S23', Data: '2023-05-01', Valor: 6899.99 },\r\n // { Id: 4, Marca: 'Sony', Descricao: 'PS 5', Data: '2023-06-01', Valor: 4899.99 },\r\n // { Id: 5, Marca: 'Samsung', Descricao: 'Watch 23', Data: '2023-05-01', Valor: 1899.99 },\r\n // ]\r\n\r\n\r\n\r\n groups: string[] = []\r\n pageDataSet: any[] = [];\r\n\r\n\r\n //array com os campos filtrados para display\r\n camposDisplay: any[] = [];\r\n\r\n //filtro\r\n isFiltroOpen: boolean = false;\r\n selectedColuna: any;\r\n todosSelecionados: boolean = false;\r\n\r\n //pagination\r\n //página atual\r\n page: number = 1;\r\n //registros por página\r\n @Input() pageOffset: number = 20;\r\n @Input() apiTotalRecords: number = 0;\r\n @Input() apiPage: number = 1;\r\n @Input() apiPagesTotal: number = 1;\r\n @Output() apiProximoEvent = new EventEmitter();\r\n @Output() apiAnteriorEvent = new EventEmitter();\r\n\r\n //total de registros\r\n totalRec: number = 0;\r\n //total de páginas\r\n totalPages: number = 0;\r\n //indexador de paginas\r\n pages: number[] = [];\r\n start: number = 1;\r\n\r\n\r\n constructor() { }\r\n\r\n valoresFiltro() {\r\n this.tabelaCampos.Colunas.forEach(c => {\r\n if (c.Filtrar) {\r\n //projetar a coluna\r\n let initial = [];\r\n let valores = this.dataSet.map(d => d[c.Campo]);\r\n c.Valores = valores.filter((value, index, self) => {\r\n return self.indexOf(value) === index;\r\n }).map(v => { return { Selecionado: false, Valor: v } });\r\n // console.log(c.Campo, valores);\r\n // console.log(c.Valores)\r\n }\r\n })\r\n }\r\n\r\n ngOnInit() {\r\n\r\n\r\n //this.inicializaGrupo();\r\n //this.agrupar('Marca');\r\n //console.log('inputs', this.inputs);\r\n //console.log('Input empresa', this.empresaId);\r\n GridTabela.init(this.tabelaCampos);\r\n this.valoresFiltro();\r\n this.filteredDataSet = this.dataSet;\r\n console.log('Init Tabela campos', this.tabelaCampos);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n console.log('On changes Tabela campos', this.tabelaCampos);\r\n //evento chamado quando o dataset for atualizado\r\n //inicializar vars de paginação\r\n this.initPage();\r\n this.todosSelecionados = false;\r\n }\r\n\r\n initPage() {\r\n if (this.apiPagination) {\r\n this.page = this.apiPage;\r\n this.totalRec = this.apiTotalRecords;\r\n this.totalPages = Math.ceil(this.totalRec / this.pageOffset);\r\n this.start = (this.page - 1) * this.pageOffset;\r\n this.gerarArrayPags();\r\n } else {\r\n this.page = 1;\r\n this.totalRec = this.filteredDataSet.length;\r\n this.totalPages = Math.ceil(this.totalRec / this.pageOffset);\r\n }\r\n\r\n if (this.inMemoryPagination === true) {\r\n this.getRegistrosPage();\r\n } else {\r\n this.pageDataSet = this.filteredDataSet;\r\n }\r\n }\r\n\r\n getRegistrosPage() {\r\n this.start = (this.page - 1) * this.pageOffset;\r\n console.log('dataset', this.filteredDataSet);\r\n console.log('start', this.start);\r\n console.log('offset', this.pageOffset);\r\n this.pageDataSet = this.filteredDataSet.slice(this.start, (this.start + this.pageOffset));\r\n console.log('page dataset', this.pageDataSet);\r\n }\r\n\r\n //in mempory pagination\r\n proximo() {\r\n if (this.page < this.totalPages) {\r\n this.page++;\r\n this.getRegistrosPage();\r\n this.gerarArrayPags();\r\n }\r\n }\r\n\r\n anterior() {\r\n if (this.page > 1) {\r\n this.page--;\r\n this.getRegistrosPage();\r\n this.gerarArrayPags();\r\n }\r\n }\r\n //\r\n proximoApi(proximo: boolean, page: number = 0) {\r\n //setar as var de controle com as var da api\r\n this.page = this.apiPage;\r\n this.totalRec = this.apiTotalRecords;\r\n\r\n this.apiProximoEvent.emit({ proximo: proximo, page: page });\r\n }\r\n\r\n gerarArrayPags() {\r\n if (this.totalRec <= 0) {\r\n this.pages = [];\r\n return;\r\n }\r\n if (this.page > 3 && this.page <= (this.totalPages)) {\r\n this.pages = [];\r\n for (let i = this.page - 2; (i <= this.page + 2) && i <= this.totalPages; i++) {\r\n this.pages.push(i);\r\n }\r\n return;\r\n }\r\n\r\n console.log('array pags:', this.page, this.totalRec);\r\n if (this.page % 5 == 0) {\r\n console.log('mod = 0', this.page % 5);\r\n this.pages = [];\r\n //atingiu o proximo grupo 1, 6, 11, 16 \r\n for (let i = this.page - 4; (i <= this.page) && i <= this.totalPages; i++) {\r\n this.pages.push(i);\r\n }\r\n } else if (this.page % 5 == 1) {\r\n console.log('mod = 1', this.page % 5);\r\n this.pages = [];\r\n //atingiu o proximo grupo 1, 6, 11, 16 \r\n for (let i = this.page; (i < (this.page + 5)) && i <= this.totalPages; i++) {\r\n this.pages.push(i);\r\n }\r\n }\r\n }\r\n\r\n inicializaGrupo() {\r\n //inicializar o primeiro grupo 'default'\r\n this.camposDisplay = this.tabelaCampos.Colunas;\r\n this.grupos[0].Tabela = this.camposDisplay;\r\n this.grupos[0].Dados = this.dataSet;\r\n }\r\n\r\n agrupar(campo: string) {\r\n this.groups.push(campo);\r\n let level = 0;\r\n for (let g in this.groups) {\r\n console.log(g);\r\n //filtrar os dados\r\n let result = this.dataSet.reduce((group, data) => {\r\n const { g } = data;\r\n group[g] = group[campo] ?? [];\r\n group[g].push(data);\r\n return group;\r\n }, {});\r\n console.log(result);\r\n }\r\n\r\n }\r\n\r\n filtrarCampos(coluna = '') {\r\n if (coluna != '') {\r\n\r\n } else {\r\n\r\n }\r\n }\r\n\r\n filtrar(col: GridColuna) {\r\n //console.log('filtrar', col);\r\n if (col.Valores && col.Valores.find(v => v.Selecionado) != null) {\r\n const valores = col.Valores.filter(v => v.Selecionado).map(v => v.Valor);\r\n\r\n //filtrar por valores selecionados\r\n this.filteredDataSet = this.dataSet.filter(d => valores.indexOf(d[col.Campo]) > -1);\r\n } else if (col.FiltroOperador && col.FiltroValor) {\r\n //console.log(col.FiltroOperador, col.FiltroValor)\r\n try {\r\n this.filteredDataSet = this.dataSet.filter(d => {\r\n switch (col.FiltroOperador) {\r\n case \"=\":\r\n return d[col.Campo] == col.FiltroValor;\r\n case \">=\":\r\n if (col.Tipo == 'number') {\r\n return LibService.stringToDecimal(d[col.Campo], true) >= LibService.stringToDecimal(col.FiltroValor ?? '', true);\r\n } else if (col.Tipo == 'data') {\r\n return new Date(this.dataToString(d[col.Campo])) >= new Date(this.dataToString(col.FiltroValor ?? ''));\r\n } else\r\n return d[col.Campo] >= (col.FiltroValor ?? '');\r\n case \"<=\":\r\n if (col.Tipo == 'number') {\r\n return LibService.stringToDecimal(d[col.Campo], true) <= LibService.stringToDecimal(col.FiltroValor ?? '', true);\r\n } else\r\n return d[col.Campo] <= (col.FiltroValor ?? '');\r\n case \"tem\":\r\n return d[col.Campo].toString().toLowerCase().indexOf((col.FiltroValor ?? '').toLowerCase()) > -1;\r\n default:\r\n return true;\r\n }\r\n\r\n });\r\n } catch (ex) {\r\n console.log(ex);\r\n this.filteredDataSet = this.dataSet;\r\n }\r\n }\r\n col.FiltroVisivel = false;\r\n\r\n this.initPage();\r\n }\r\n\r\n getPage() {\r\n\r\n }\r\n\r\n limpar(col: GridColuna) {\r\n console.log(this.dataSet.length);\r\n this.filteredDataSet = this.dataSet;\r\n col.FiltroVisivel = false;\r\n this.initPage();\r\n }\r\n\r\n dataToString(data: string): string {\r\n if (data) {\r\n return data.split('/').reverse().join('-');\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n ordenar(col: GridColuna) {\r\n if (col.OrdemStatus == 0 || col.OrdemStatus == -1) {\r\n if (col.Tipo == 'data') {\r\n this.filteredDataSet.sort((a, b) => this.dataToString(a[col.Campo]) > this.dataToString(b[col.Campo]) ? 1 : (this.dataToString(a[col.Campo]) < this.dataToString(b[col.Campo]) ? -1 : 0));\r\n } else if (col.Tipo == 'number') {\r\n this.filteredDataSet.sort((a, b) => LibService.stringToDecimal(a[col.Campo]) > LibService.stringToDecimal(b[col.Campo]) ? 1 : (LibService.stringToDecimal(a[col.Campo]) < LibService.stringToDecimal(b[col.Campo]) ? -1 : 0));\r\n } else\r\n this.filteredDataSet.sort((a, b) => a[col.Campo] > b[col.Campo] ? 1 : (a[col.Campo] < b[col.Campo] ? -1 : 0));\r\n col.OrdemStatus = 1; //asc\r\n } else {\r\n if (col.Tipo == 'data') {\r\n this.filteredDataSet.sort((a, b) => this.dataToString(a[col.Campo]) < this.dataToString(b[col.Campo]) ? 1 : (this.dataToString(a[col.Campo]) > this.dataToString(b[col.Campo]) ? -1 : 0));\r\n } else if (col.Tipo == 'number') {\r\n this.filteredDataSet.sort((a, b) => LibService.stringToDecimal(a[col.Campo], true) < LibService.stringToDecimal(b[col.Campo], true) ? 1 : (LibService.stringToDecimal(a[col.Campo], true) > LibService.stringToDecimal(b[col.Campo], true) ? -1 : 0));\r\n } else\r\n this.filteredDataSet.sort((a, b) => a[col.Campo] < b[col.Campo] ? 1 : (a[col.Campo] > b[col.Campo] ? -1 : 0));\r\n col.OrdemStatus = -1; //desc\r\n }\r\n }\r\n\r\n setFiltroOpen(col: any) {\r\n col.FiltroVisivel = !col.FiltroVisivel\r\n if (col.FiltroVisivel) {\r\n this.selectedColuna = col;\r\n //console.log(this.selectedColuna);\r\n }\r\n }\r\n\r\n selecionarTodos() {\r\n //this.todosSelecionados = !this.todosSelecionados;\r\n if (this.tabelaCampos.CampoSelecionar) {\r\n this.filteredDataSet.forEach(item => {\r\n item[this.tabelaCampos.CampoSelecionar ?? 'Selecionado'] = this.todosSelecionados;\r\n });\r\n }\r\n this.selecionarChecked.emit();\r\n }\r\n\r\n selecionarLinha(item: any) {\r\n this.selecionarItem.emit(item);\r\n this.selectedItem = item;\r\n }\r\n\r\n excluirLinha(item: any) {\r\n this.excluirItem.emit(item);\r\n }\r\n\r\n //check\r\n selecionadoChecked() {\r\n this.selecionarChecked.emit();\r\n }\r\n}\r\n\r\n","<div style=\"font-size: 14px;\">\n <div id=\"painelExportacao\">\n @if(inMemoryPagination || apiPagination) {\n <ion-row>\n <!--\n <ion-col size=\"2\">\n <ion-button *ngIf=\"tabelaCampos.Selecionar === true\" size=\"small\" fill=\"outline\" color=\"medium\"\n (click)=\"selecionarTodos()\">Selecionar Todos</ion-button>\n </ion-col>\n -->\n <ion-col size-md=\"5\" size-xs=\"12\">\n @if (inMemoryPagination === true) {\n <ion-button size=\"small\" fill=\"outline\" color=\"bluetool\" (click)=\"anterior()\">\n <ion-icon name=\"chevron-back-outline\" slot=\"start\"></ion-icon>\n Anterior\n </ion-button>\n }\n @if (inMemoryPagination === true) {\n <ion-button size=\"small\" fill=\"outline\" color=\"bluetool\" (click)=\"proximo()\">\n Próximo\n <ion-icon name=\"chevron-forward-outline\" slot=\"end\"></ion-icon>\n </ion-button>\n }\n @if (apiPagination === true) {\n <ion-button size=\"small\" fill=\"outline\" color=\"medium\" shape=\"round\" class=\"circle-button\"\n (click)=\"proximoApi(false)\" alt=\"Primeiro\">\n <ion-icon name=\"chevron-back-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n @for (pag of pages; track pag) {\n <ion-button shape=\"round\" [fill]=\"pag == this.page ? 'solid' : 'outline'\" size=\"small\"\n class=\"circle-button\" [color]=\"pag == this.page ? 'verde' : 'medium'\"\n [class]=\"{ 'pageSelected': pag == this.page }\" (click)=\"proximoApi(false, pag)\">{{ pag\n }}</ion-button>\n }\n @if (apiPagination === true) {\n <ion-button size=\"small\" fill=\"outline\" color=\"medium\" shape=\"round\" class=\"circle-button\"\n (click)=\"proximoApi(true)\" alt=\"Último\">\n <ion-icon name=\"chevron-forward-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n\n </ion-col>\n <ion-col size-md=\"5\" size-xs=\"12\" style=\"text-align: left;\">\n @if ((inMemoryPagination || apiPagination) && totalRec > 0) {\n <span style=\"display: block; margin-top: 10px;\">Exibindo {{ start + 1 }} - {{ (start +\n pageOffset) < totalRec ? (start + pageOffset) : totalRec }} total de {{ totalRec }} </span>\n }\n </ion-col>\n </ion-row>\n }\n </div>\n <div style=\"width: 100%; margin-top: 16px; overflow-y: auto;\" [style.min-height]=\"minHeight\"\n [style.max-height]=\"maxHeight\" class=\"scroll-container\">\n <table class=\"grid\">\n <thead>\n <tr style=\"background-color: var(--ion-color-bluetool); color: white;\">\n @if (tabelaCampos.Selecionar === true) {\n <td style=\"width: 3%; text-align: center;\">\n <input type=\"checkbox\" [(ngModel)]=\"todosSelecionados\" (change)=\"selecionarTodos()\">\n </td>\n }\n @for (col of tabelaCampos.Colunas; track col) {\n <td [style.width]=\"col.Tamanho\">\n <div style=\"position: relative;\">\n <div style=\"display: flex; justify-content: space-between; align-items: end;\">\n <strong>{{ col.Titulo }}</strong>\n <div>\n @if (col.Ordem) {\n <ion-icon slot=\"end\" (click)=\"ordenar(col)\" style=\"cursor: pointer;\"\n [name]=\"col.OrdemStatus == 0 ? 'swap-vertical' : (col.OrdemStatus == 1 ? 'arrow-up': 'arrow-down')\">\n </ion-icon>\n }\n @if (col.Filtrar) {\n <ion-icon name=\"funnel\" (click)=\"setFiltroOpen(col)\" slot=\"end\">\n </ion-icon>\n }\n </div>\n </div>\n\n\n <div class=\"caixaGrande\" [hidden]=\"!col.FiltroVisivel\" tabindex=\"-1\"\n style=\"color: black; display: block; position: absolute; z-index: 800; width: 210px; left: 0px; opacity: 0.9; background-color: white; max-height: 200px;\">\n Filtrar:\n <div>\n <div style=\"display: flex; justify-content: space-between; align-items: start;\">\n <select style=\"width: 80px;\" [(ngModel)]=\"col.FiltroOperador\">\n <option>=</option>\n <option>&gt;=</option>\n <option>&lt;=</option>\n <option>tem</option>\n </select>\n <input style=\"width: 100px;\" type=\"text\" [(ngModel)]=\"col.FiltroValor\">\n </div>\n <ion-button size=\"small\" color=\"medium\" expand=\"block\"\n (click)=\"filtrar(col)\">Filtrar</ion-button>\n <ion-button size=\"small\" color=\"light\" expand=\"block\"\n (click)=\"limpar(col)\">Limpar</ion-button>\n </div>\n @if (col.Valores) {\n <div class=\"scroll-container\" style=\"height: 200px; overflow-y: scroll;\">\n @for (valor of col.Valores; track valor) {\n <div>\n <input type=\"checkbox\" [(ngModel)]=\"valor.Selecionado\">\n <span>{{ valor.Valor }}</span>\n </div>\n }\n </div>\n }\n </div>\n\n </div>\n </td>\n }\n @if (tabelaCampos.Excluir === true) {\n <td>\n\n </td>\n }\n </tr>\n </thead>\n <tbody>\n @for(item of pageDataSet; track item) {\n <tr [class]=\"item == selectedItem ? 'item-selecionado' : '' \">\n @if (tabelaCampos.Selecionar === true) {\n <td style=\"text-align: center; cursor: auto;\">\n <input type=\"checkbox\" [(ngModel)]=\"item[tabelaCampos.CampoSelecionar ?? 'Selecionado']\"\n (change)=\"selecionadoChecked()\">\n </td>\n }\n @for (col of tabelaCampos.Colunas; track col.Campo) {\n <td class=\"col\" [style.width]=\"col.Tamanho\"\n [style.text-align]=\"col.Tipo == 'number' ? 'right' : (col.Alinhamento ?? 'left')\"\n (click)=\"col.ClickFunction ? col.ClickFunction(item) : selecionarLinha(item)\">\n @if (col.Pipe == 'date') {\n <span>{{ item[col.Campo] | date: 'dd/MM/yyyy' }}</span>\n }\n @if (col.Pipe == 'datetime') {\n <span>{{ item[col.Campo] | date: 'dd/MM/yyyy HH:mm:ss' }}</span>\n }\n @if (col.Pipe == 'valor') {\n <span>{{ item[col.Campo] | number }}</span>\n }\n @if(col.RenderFunction) {\n <span [innerHtml]=\"col.RenderFunction(item) | safeHtml\"></span>\n }\n @if (!col.Pipe && !col.RenderFunction) {\n <span>{{ item[col.Campo] ?? col.Default }}</span>\n }\n </td>\n }\n @if (tabelaCampos.Excluir === true) {\n <td style=\"padding: 0px; text-align: center;\">\n <ion-button size=\"small\" color=\"danger\" fill=\"outline\" style=\"transform: scale(0.85);\"\n (click)=\"excluirLinha(item)\">\n <ion-icon name=\"trash\"></ion-icon>\n </ion-button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <!--\n <ion-modal [isOpen]=\"isFiltroOpen\" (didDismiss)=\"isFiltroOpen = false;\">\n <ng-template>\n <ion-content class=\"ion-padding\">\n <div class=\"caixaGrande\">\n Filtrar:\n <div *ngIf=\"selectedColuna.Valores\">\n <div *ngFor=\"let valor of selectedColuna.Valores\">\n <span>{{ valor }}</span>\n </div>\n </div>\n </div>\n </ion-content>\n </ng-template>\n </ion-modal>\n -->\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { IonModal, IonContent, IonButton, IonIcon, IonRow, IonCol, IonInput, IonSelect, IonSelectOption } from \"@ionic/angular\";\r\nimport { Intervalo } from '../../lib/model/intervalo';\r\n\r\n@Component({\r\n selector: 'kb-periodo-intervalo',\r\n imports: [IonInput, IonCol, IonRow, IonIcon, IonButton, IonSelect, IonSelectOption ],\r\n templateUrl: './periodo-intervalo.html',\r\n styleUrl: './periodo-intervalo.scss',\r\n})\r\nexport class PeriodoIntervaloComponent implements OnInit {\r\n @Output() aceitarFunction = new EventEmitter();\r\n @Input() btnHeight = '2.1em';\r\n visible: boolean = false;\r\n intervaloValor: number = 1;\r\n intervaloTipo: string = 'dia';\r\n dias: Intervalo[] = [\r\n { valor: 1, selecionado: false, tipo: 'dia' },\r\n { valor: 2, selecionado: false, tipo: 'dia' },\r\n { valor: 3, selecionado: false, tipo: 'dia' },\r\n { valor: 4, selecionado: false, tipo: 'dia' },\r\n { valor: 5, selecionado: false, tipo: 'dia' },\r\n ];\r\n semanas: Intervalo[] = [\r\n { valor: 1, selecionado: false, tipo: 'sem' },\r\n { valor: 2, selecionado: false, tipo: 'sem' },\r\n { valor: 3, selecionado: false, tipo: 'sem' },\r\n { valor: 4, selecionado: false, tipo: 'sem' },\r\n //{ valor: 5, selecionado: false },\r\n ];\r\n meses: Intervalo[] = [\r\n { valor: 1, selecionado: false, tipo: 'mes' },\r\n { valor: 2, selecionado: false, tipo: 'mes' },\r\n { valor: 3, selecionado: false, tipo: 'mes' },\r\n { valor: 4, selecionado: false, tipo: 'mes' },\r\n { valor: 5, selecionado: false, tipo: 'mes' },\r\n //{ valor: 5, selecionado: false },\r\n ];\r\n selecionado: Intervalo | undefined;\r\n constructor() { }\r\n\r\n ngOnInit() { }\r\n\r\n selecionar(intervalo: Intervalo) {\r\n if (this.selecionado)\r\n this.selecionado.selecionado = !this.selecionado.selecionado;\r\n intervalo.selecionado = true;\r\n this.selecionado = intervalo;\r\n //binding de controles\r\n this.intervaloValor = intervalo.valor;\r\n this.intervaloTipo = intervalo.tipo;\r\n }\r\n\r\n setValor(value: any) {\r\n this.intervaloValor = value;\r\n }\r\n\r\n setTipo(value: string) {\r\n console.log(value);\r\n this.intervaloTipo = value;\r\n }\r\n\r\n aceitar() {\r\n console.log(this.intervaloValor, this.intervaloTipo);\r\n if (this.aceitarFunction) {\r\n this.aceitarFunction.emit({ valor: this.intervaloValor, tipo: this.intervaloTipo } as Intervalo);\r\n }\r\n this.visible = false;\r\n }\r\n\r\n}\r\n\r\n","<div>\n <ion-button id=\"btnPeriodo\" size=\"small\" color=\"medium\" fill=\"outline\" (click)=\"visible = !visible;\"\n [style.min-height]=\"btnHeight\">\n <ion-icon slot=\"start\" name=\"calendar\"></ion-icon>\n Período\n </ion-button>\n</div>\n<div [hidden]=\"!visible\" class=\"painel-intervalo\">\n <ion-row class=\"ion-align-items-center ion-justify-content-center\">\n <ion-col size=\"3\"><strong>Dias</strong></ion-col>\n <ion-col *ngFor=\"let dia of dias\" size=\"1.5\"\n [class]=\"dia.selecionado === true ? 'col-valor-selecionado' : 'col-valor'\" (click)=\"selecionar(dia)\">{{ dia.valor\n }}</ion-col>\n <!--\n <ion-col size=\"1.5\" class=\"col-valor\">2</ion-col>\n <ion-col size=\"1.5\" class=\"col-valor\">3</ion-col>\n <ion-col size=\"1.5\" class=\"col-valor\">4</ion-col>\n <ion-col size=\"1.5\" class=\"col-valor\">5</ion-col>\n -->\n </ion-row>\n <ion-row class=\"ion-align-items-center ion-justify-content-center\">\n <ion-col size=\"3\"><strong>Semanas</strong></ion-col>\n <ion-col *ngFor=\"let sem of semanas\" size=\"1.5\"\n [class]=\"sem.selecionado === true ? 'col-valor-selecionado' : 'col-valor'\" (click)=\"selecionar(sem)\">{{ sem.valor\n }}</ion-col>\n <ion-col></ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center ion-justify-content-center\">\n <ion-col size=\"3\"><strong>Mes</strong></ion-col>\n <ion-col *ngFor=\"let mes of meses\" size=\"1.5\"\n [class]=\"mes.selecionado === true ? 'col-valor-selecionado' : 'col-valor'\" (click)=\"selecionar(mes)\">{{ mes.valor\n }}</ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col>\n <ion-input #inputValor\n class=\"input-periodo\" \n type=\"number\" \n max=\"12\" \n (input)=\"setValor(inputValor.value)\" \n [value]=\"intervaloValor\"></ion-input>\n </ion-col>\n <ion-col>\n <ion-select #selectTipo\n class=\"input-periodo\" interface=\"popover\" \n [value]=\"intervaloTipo\"\n (ionChange)=\"setTipo(selectTipo.value)\"\n >\n <ion-select-option value=\"dia\">Dias</ion-select-option>\n <ion-select-option value=\"sem\">Semanas</ion-select-option>\n <ion-select-option value=\"mes\">Meses</ion-select-option>\n </ion-select>\n </ion-col>\n </ion-row>\n \n <ion-row class=\"ion-justify-content-end\">\n <ion-col style=\"text-align: end;\">\n <ion-button color=\"medium\" fill=\"outline\" (click)=\"visible=false;\">Cancelar</ion-button>\n <ion-button color=\"primary\" (click)=\"aceitar()\">Ok</ion-button>\n </ion-col>\n </ion-row>\n \n</div>\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { IonItem, IonLabel } from \"@ionic/angular\";\r\nimport { BaseInputComponent } from '../baseInputComponent';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport {\r\n ClassicEditor,\r\n AccessibilityHelp,\r\n Alignment,\r\n Autoformat,\r\n AutoImage,\r\n AutoLink,\r\n Autosave,\r\n BlockQuote,\r\n Bold,\r\n CloudServices,\r\n Code,\r\n CodeBlock,\r\n Essentials,\r\n FindAndReplace,\r\n FontBackgroundColor,\r\n FontColor,\r\n FontFamily,\r\n FontSize,\r\n GeneralHtmlSupport,\r\n Heading,\r\n Highlight,\r\n HorizontalLine,\r\n ImageBlock,\r\n ImageCaption,\r\n ImageInline,\r\n ImageInsertViaUrl,\r\n ImageResize,\r\n ImageStyle,\r\n ImageTextAlternative,\r\n ImageToolbar,\r\n ImageUpload,\r\n Indent,\r\n IndentBlock,\r\n Italic,\r\n Link,\r\n LinkImage,\r\n List,\r\n ListProperties,\r\n MediaEmbed,\r\n Paragraph,\r\n PasteFromOffice,\r\n RemoveFormat,\r\n SelectAll,\r\n SpecialCharacters,\r\n SpecialCharactersArrows,\r\n SpecialCharactersCurrency,\r\n SpecialCharactersEssentials,\r\n SpecialCharactersLatin,\r\n SpecialCharactersMathematical,\r\n SpecialCharactersText,\r\n Strikethrough,\r\n Style,\r\n Subscript,\r\n Superscript,\r\n Table,\r\n TableCaption,\r\n TableCellProperties,\r\n TableColumnResize,\r\n TableProperties,\r\n TableToolbar,\r\n TextTransformation,\r\n TodoList,\r\n Underline,\r\n Undo,\r\n type EditorConfig\r\n} from 'ckeditor5';\r\nimport { ChangeEvent, FocusEvent, CKEditorModule, BlurEvent } from '@ckeditor/ckeditor5-angular';\r\nimport { NgClass } from '@angular/common';\r\n\r\n\r\n@Component({\r\n selector: 'kb-input-html',\r\n imports: [IonLabel, IonItem, NgClass, CKEditorModule],\r\n templateUrl: './input-html.html',\r\n styleUrls: ['./input-html.scss', './../baseInputComponent.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InputHtmlComponent,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputHtmlComponent extends BaseInputComponent\r\n implements OnInit, ControlValueAccessor, OnDestroy {\r\n //referência ao componente CKEditor\r\n public Editor: typeof ClassicEditor | null = null;\r\n //objeto de configuração do CKEditor\r\n public config: EditorConfig = {};\r\n @ViewChild(\"inputEmail\", { static: false }) inputEmail: any;\r\n //control value acessor\r\n public data!: string;\r\n private onChange: Function = (data: string) => { this.data = data };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n public console = console;\r\n\r\n //@ViewChild(\"itemInput\", { read: ElementRef }) itemInput: any;\r\n\r\n constructor() {\r\n super();\r\n this.configurarCKEditor();\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n \r\n }\r\n\r\n /*\r\n public onChange( { editor }: ChangeEvent ) {\r\n\t\tconst data = editor.getData();\r\n\r\n\t\tconsole.log( data );\r\n\t}\r\n */\r\n\r\n //writeValue({ editor }: ChangeEvent): void {\r\n writeValue(data: string, atualizar: boolean = true): void {\r\n //Converte o valor corretamente de acordo com o tipo de input\r\n // if (!editor) {\r\n // return;\r\n // }\r\n //const texto = editor.getData();\r\n const texto = data;\r\n //console.log('write value', texto); \r\n this.onChange(texto);\r\n if (atualizar) {\r\n this.data = texto; \r\n } \r\n }\r\n\r\n blurEditor({ editor }: BlurEvent) {\r\n //console.log('blur', editor); \r\n }\r\n\r\n blurItem() {\r\n //console.log('blur', this.inputEmail); \r\n }\r\n\r\n // writeValue(): void {\r\n // //Converte o valor corretamente de acordo com o tipo de input\r\n // const value = this.Editor.getData();\r\n // console.log('write value', value);\r\n // this.onChange(value);\r\n // }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n\r\n }\r\n\r\n onInputChange(event: any) {\r\n const valor = event?.detail?.value;\r\n this.data = valor;\r\n this.onChange(valor);\r\n }\r\n //para cores focus\r\n onBlur() {\r\n //console.log('input select blur')\r\n //document.getElementById(\"item-select\").classList.remove(\"item-has-focus\"); \r\n\r\n if (this.form) {\r\n this.form.get(this.formControlName)?.markAsTouched();\r\n }\r\n }\r\n\r\n entered() {\r\n //adicionar classe ao ion-item, não funcionou\r\n //console.log('input focused');\r\n\r\n }\r\n\r\n //configuração do CKEditor\r\n private configurarCKEditor() {\r\n this.Editor = ClassicEditor;\r\n this.config = {\r\n toolbar: {\r\n items: [\r\n 'undo',\r\n 'redo',\r\n '|',\r\n 'findAndReplace',\r\n '|',\r\n 'heading',\r\n 'style',\r\n '|',\r\n 'fontSize',\r\n 'fontFamily',\r\n 'fontColor',\r\n 'fontBackgroundColor',\r\n '|',\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'strikethrough',\r\n 'subscript',\r\n 'superscript',\r\n 'code',\r\n 'removeFormat',\r\n '|',\r\n 'specialCharacters',\r\n 'horizontalLine',\r\n 'link',\r\n 'insertImage',\r\n 'mediaEmbed',\r\n 'insertTable',\r\n 'highlight',\r\n 'blockQuote',\r\n 'codeBlock',\r\n '|',\r\n 'alignment',\r\n '|',\r\n 'bulletedList',\r\n 'numberedList',\r\n 'todoList',\r\n 'outdent',\r\n 'indent'\r\n ],\r\n shouldNotGroupWhenFull: false\r\n },\r\n plugins: [\r\n AccessibilityHelp,\r\n Alignment,\r\n Autoformat,\r\n AutoImage,\r\n AutoLink,\r\n Autosave,\r\n BlockQuote,\r\n Bold,\r\n CloudServices,\r\n Code,\r\n CodeBlock,\r\n Essentials,\r\n FindAndReplace,\r\n FontBackgroundColor,\r\n FontColor,\r\n FontFamily,\r\n FontSize,\r\n GeneralHtmlSupport,\r\n Heading,\r\n Highlight,\r\n HorizontalLine,\r\n ImageBlock,\r\n ImageCaption,\r\n ImageInline,\r\n ImageInsertViaUrl,\r\n ImageResize,\r\n ImageStyle,\r\n ImageTextAlternative,\r\n ImageToolbar,\r\n ImageUpload,\r\n Indent,\r\n IndentBlock,\r\n Italic,\r\n Link,\r\n LinkImage,\r\n List,\r\n ListProperties,\r\n MediaEmbed,\r\n Paragraph,\r\n PasteFromOffice,\r\n RemoveFormat,\r\n SelectAll,\r\n SpecialCharacters,\r\n SpecialCharactersArrows,\r\n SpecialCharactersCurrency,\r\n SpecialCharactersEssentials,\r\n SpecialCharactersLatin,\r\n SpecialCharactersMathematical,\r\n SpecialCharactersText,\r\n Strikethrough,\r\n Style,\r\n Subscript,\r\n Superscript,\r\n Table,\r\n TableCaption,\r\n TableCellProperties,\r\n TableColumnResize,\r\n TableProperties,\r\n TableToolbar,\r\n TextTransformation,\r\n TodoList,\r\n Underline,\r\n Undo\r\n ],\r\n fontFamily: {\r\n supportAllValues: true\r\n },\r\n fontSize: {\r\n options: [10, 12, 14, 'default', 18, 20, 22],\r\n supportAllValues: true\r\n },\r\n licenseKey: 'GPL',\r\n heading: {\r\n options: [\r\n {\r\n model: 'paragraph',\r\n title: 'Paragraph',\r\n class: 'ck-heading_paragraph'\r\n },\r\n {\r\n model: 'heading1',\r\n view: 'h1',\r\n title: 'Heading 1',\r\n class: 'ck-heading_heading1'\r\n },\r\n {\r\n model: 'heading2',\r\n view: 'h2',\r\n title: 'Heading 2',\r\n class: 'ck-heading_heading2'\r\n },\r\n {\r\n model: 'heading3',\r\n view: 'h3',\r\n title: 'Heading 3',\r\n class: 'ck-heading_heading3'\r\n },\r\n {\r\n model: 'heading4',\r\n view: 'h4',\r\n title: 'Heading 4',\r\n class: 'ck-heading_heading4'\r\n },\r\n {\r\n model: 'heading5',\r\n view: 'h5',\r\n title: 'Heading 5',\r\n class: 'ck-heading_heading5'\r\n },\r\n {\r\n model: 'heading6',\r\n view: 'h6',\r\n title: 'Heading 6',\r\n class: 'ck-heading_heading6'\r\n }\r\n ]\r\n },\r\n htmlSupport: {\r\n allow: [\r\n {\r\n name: /^.*$/,\r\n styles: true,\r\n attributes: true,\r\n classes: true\r\n }\r\n ]\r\n },\r\n image: {\r\n toolbar: [\r\n 'toggleImageCaption',\r\n 'imageTextAlternative',\r\n '|',\r\n 'imageStyle:inline',\r\n 'imageStyle:wrapText',\r\n 'imageStyle:breakText',\r\n '|',\r\n 'resizeImage'\r\n ]\r\n },\r\n link: {\r\n addTargetToExternalLinks: true,\r\n defaultProtocol: 'https://',\r\n decorators: {\r\n toggleDownloadable: {\r\n mode: 'manual',\r\n label: 'Downloadable',\r\n attributes: {\r\n download: 'file'\r\n }\r\n }\r\n }\r\n },\r\n list: {\r\n properties: {\r\n styles: true,\r\n startIndex: true,\r\n reversed: true\r\n }\r\n },\r\n placeholder: 'Type or paste your content here!',\r\n style: {\r\n definitions: [\r\n {\r\n name: 'Article category',\r\n element: 'h3',\r\n classes: ['category']\r\n },\r\n {\r\n name: 'Title',\r\n element: 'h2',\r\n classes: ['document-title']\r\n },\r\n {\r\n name: 'Subtitle',\r\n element: 'h3',\r\n classes: ['document-subtitle']\r\n },\r\n {\r\n name: 'Info box',\r\n element: 'p',\r\n classes: ['info-box']\r\n },\r\n {\r\n name: 'Side quote',\r\n element: 'blockquote',\r\n classes: ['side-quote']\r\n },\r\n {\r\n name: 'Marker',\r\n element: 'span',\r\n classes: ['marker']\r\n },\r\n {\r\n name: 'Spoiler',\r\n element: 'span',\r\n classes: ['spoiler']\r\n },\r\n {\r\n name: 'Code (dark)',\r\n element: 'pre',\r\n classes: ['fancy-code', 'fancy-code-dark']\r\n },\r\n {\r\n name: 'Code (bright)',\r\n element: 'pre',\r\n classes: ['fancy-code', 'fancy-code-bright']\r\n }\r\n ]\r\n },\r\n table: {\r\n contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells', 'tableProperties', 'tableCellProperties']\r\n }\r\n };\r\n }\r\n}\r\n\r\n","<div [class]=\"{ 'input-text-padding': !classic }\">\r\n <!-- <ion-item #itemInput lines=\"none\" (ionBlur)=\"blurItem()\"\r\n style=\" --background: inherited; --background-focused: transparent; padding-right: 0px; overflow: visible;\"\r\n [class]=\"itemClass + ' classic' + ' item-text-wrap'\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"> -->\r\n @if (label) {\r\n <ion-label style=\"color: var(--input-label-color); font-size: 13px;\">{{ label }}</ion-label>\r\n }\r\n @if (Editor) {\r\n <ckeditor #inputEmail class=\"ckeditor-form\" [data]=\"data\" [editor]=\"Editor\" [config]=\"config\" (change)=\"writeValue($event.editor.getData(), false)\" (blur)=\"blurEditor($event)\"></ckeditor>\r\n }\r\n <!-- </ion-item> -->\r\n</div>","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-input-arquivo',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './input-arquivo.html',\r\n styleUrl: './input-arquivo.scss',\r\n})\r\nexport class InputArquivoComponent implements OnInit, ControlValueAccessor {\r\n \r\n //@Input() disabled: boolean = false;\r\n //para upload automático\r\n @Input() pasta: string = \"\";\r\n @Input() nomeArquivo: string = \"\";\r\n @Input() subir: boolean = false;\r\n @Input() callback = new EventEmitter();\r\n\r\n @Input() caption: string = \"Selecionar arquivo\";\r\n @Input() tipoArquivo: string = \"image/*\";\r\n @Output() fileSelected = new EventEmitter();\r\n @Input() form: boolean = false;\r\n @Input() showIcon: boolean = false;\r\n @Input() icon: string = \"cloud-upload-outline\";\r\n @Input() iconSrc: string = \"\"; ///assets/icon/image_primary_24dp.svg\r\n @Input() btnExpand: string = \"block\";\r\n @Input() btnColor: string = \"primary\";\r\n @Input() btnFill: string = \"outline\";\r\n @Input() iconSlot: string = \"start\";\r\n @Input() arquivoTipos: string = \"image/*\";\r\n @Input() readOnly: boolean = false;\r\n\r\n //imagem\r\n @ViewChild('inputNome', { read: ElementRef, static: true }) myInput: any;\r\n public captureDataUrl: string = \"\";\r\n public formFile: any;\r\n public sucessoEvent: Subject<boolean> = new Subject();\r\n\r\n data: string = \"\";\r\n filename: string = \"\";\r\n\r\n private onChange: Function = (selectedColor: string) => { };\r\n private onTouch: Function = () => { };\r\n private disabled: boolean = false;\r\n\r\n showImageBrowser() {\r\n this.myInput.nativeElement.click();\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.onChange(value);\r\n this.data = value;\r\n if (this.callback)\r\n this.callback.emit(this.filename);\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = this.disabled;\r\n }\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n loadImagem() {\r\n //console.log(this.myInput);\r\n this.formFile = this.myInput.nativeElement.files[0];\r\n \r\n if (this.fileSelected) {\r\n this.fileSelected.emit({ content: this.formFile, name: this.myInput.nativeElement.files[0].name });\r\n }\r\n\r\n if (this.form) {\r\n //this.formFile = this.myInput.nativeElement.files[0];\r\n this.sucessoEvent.next(true);\r\n\r\n } else {\r\n //this.formFile = this.myInput.nativeElement.files[0];\r\n this.getBase64FromFile(this.myInput.nativeElement.files[0])\r\n .then((result: any) => {\r\n //console.log('file: ', result.toString());\r\n //console.log('nome do arquivo: ', this.nomeArquivo.toLowerCase());\r\n let searchstr = result.toString().substring(0, result.toString().indexOf('base64,')) + 'base64,';\r\n console.log('searchstring', searchstr);\r\n if (this.subir) {\r\n this.captureDataUrl = result.toString().replace(searchstr, '');\r\n } else {\r\n this.captureDataUrl = result.toString();\r\n }\r\n //this.utils.showToast('Imagem carregada em memória.');\r\n this.sucessoEvent.next(true);\r\n //console.log('file', this.myInput.nativeElement.files[0]);\r\n this.filename = this.myInput.nativeElement.files[0].name;\r\n this.writeValue(this.captureDataUrl);\r\n\r\n\r\n\r\n // if (this.nomeArquivo && this.subir) {\r\n // this.arquivoService.setImagem({ Nome: this.nomeArquivo, Conteudo: this.captureDataUrl, Status: 0, Pasta: this.pasta })\r\n // .subscribe(result => {\r\n // console.log('result set imagem', result);\r\n // if (result.Status == 200) {\r\n // this.utils.showToast('Sucesso!');\r\n // } else {\r\n // this.utils.showAlert('Erro. Tente mais tarde.' + result.Conteudo);\r\n // }\r\n // }, error => {\r\n // this.utils.showAlert('Erro. Tente mais tarde.');\r\n // })\r\n // }\r\n\r\n }).catch(error => {\r\n this.sucessoEvent.next(false);\r\n })\r\n }\r\n }\r\n\r\n //util\r\n getBase64FromFile(file: File) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n });\r\n }\r\n}\r\n\r\n","<div style=\"text-align:center;\">\r\n <ion-button [fill]=\"btnFill\" size=\"normal\" [color]=\"btnColor\" (click)=\"showImageBrowser()\" [expand]=\"btnExpand\"\r\n [disabled]=\"readOnly\">\r\n @if (showIcon) {\r\n <ion-icon class=\"ion-padding-end\" [slot]=\"iconSlot\" [src]=\"iconSrc\" [name]=\"icon\"></ion-icon>\r\n }\r\n {{ caption }}\r\n </ion-button>\r\n <input type=\"file\" id=\"upimgfile\" name=\"uploadfile\" #inputNome [accept]=\"arquivoTipos\" (change)=\"loadImagem()\"\r\n style=\"display: none;\" />\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { IonRow, IonCol, IonIcon, AlertController } from \"@ionic/angular\";\r\nimport { AgendaSemanalHorario, AgendaSemanalItem, AgendaSemanalLegenda, DiaAgenda } from '../../lib/model/agenda-semanal-horario';\r\nimport { addIcons } from 'ionicons';\r\nimport { chevronBackOutline, chevronForwardOutline } from 'ionicons/icons';\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n imports: [IonIcon, IonCol, IonRow, NgClass],\r\n selector: 'kb-agenda-semanal',\r\n styleUrl: './agenda-semanal.scss',\r\n templateUrl: './agenda-semanal.html',\r\n})\r\nexport class AgendaSemanalComponent implements OnInit {\r\n\r\n @Input() itens: AgendaSemanalItem[] = [];\r\n @Input() legendas: AgendaSemanalLegenda[] = [];\r\n @Input() textoAjuda: string = '';\r\n @Input() horaInicio: number = 6;\r\n @Input() horaFim: number = 23;\r\n @Input() intervaloMinutos: number = 30;\r\n @Input() horariosPadrao: string[] = [];\r\n\r\n @Output() horarioSelecionado = new EventEmitter<AgendaSemanalHorario>();\r\n\r\n @Output() itemSelecionado = new EventEmitter<AgendaSemanalItem>();\r\n\r\n private readonly nomesMeses: string[] = [\r\n 'Janeiro',\r\n 'Fevereiro',\r\n 'Março',\r\n 'Abril',\r\n 'Maio',\r\n 'Junho',\r\n 'Julho',\r\n 'Agosto',\r\n 'Setembro',\r\n 'Outubro',\r\n 'Novembro',\r\n 'Dezembro'\r\n ];\r\n\r\n private readonly nomesDias: string[] = [\r\n 'Dom',\r\n 'Seg',\r\n 'Ter',\r\n 'Qua',\r\n 'Qui',\r\n 'Sex',\r\n 'Sáb'\r\n ];\r\n\r\n mesSelecionado: number = 0;\r\n anoSelecionado: number = 0;\r\n\r\n dataReferenciaSemana: Date = new Date();\r\n\r\n diasSemana: DiaAgenda[] = [];\r\n horarios: string[] = [];\r\n\r\n constructor(private alertController: AlertController) {\r\n addIcons({\r\n chevronBackOutline,\r\n chevronForwardOutline\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const hoje = new Date();\r\n\r\n hoje.setHours(0, 0, 0, 0);\r\n\r\n this.dataReferenciaSemana = this.obterSegundaFeira(hoje);\r\n this.atualizarMesAno(this.dataReferenciaSemana);\r\n this.gerarHorarios();\r\n this.gerarSemana(this.dataReferenciaSemana);\r\n }\r\n\r\n get nomeMes(): string {\r\n return this.nomesMeses[this.mesSelecionado];\r\n }\r\n\r\n get numeroMes(): string {\r\n return (this.mesSelecionado + 1).toString().padStart(2, '0');\r\n }\r\n\r\n mesAnterior(): void {\r\n const novaData = new Date(\r\n this.dataReferenciaSemana\r\n );\r\n\r\n novaData.setDate(\r\n novaData.getDate() - 30\r\n );\r\n\r\n this.gerarSemana(novaData);\r\n\r\n this.atualizarMesAno(\r\n this.dataReferenciaSemana\r\n );\r\n }\r\n\r\n proximoMes(): void {\r\n const novaData = new Date(\r\n this.dataReferenciaSemana\r\n );\r\n\r\n novaData.setDate(\r\n novaData.getDate() + 30\r\n );\r\n\r\n this.gerarSemana(novaData);\r\n\r\n this.atualizarMesAno(\r\n this.dataReferenciaSemana\r\n );\r\n }\r\n\r\n semanaAnterior(): void {\r\n const novaData = new Date(this.dataReferenciaSemana);\r\n\r\n novaData.setDate(novaData.getDate() - 7);\r\n\r\n this.gerarSemana(novaData);\r\n this.atualizarMesAno(this.dataReferenciaSemana);\r\n }\r\n\r\n proximaSemana(): void {\r\n const novaData = new Date(this.dataReferenciaSemana);\r\n\r\n novaData.setDate(novaData.getDate() + 7);\r\n\r\n this.gerarSemana(novaData);\r\n this.atualizarMesAno(this.dataReferenciaSemana);\r\n }\r\n\r\n obterSegundaFeira(data: Date): Date {\r\n const resultado = new Date(data);\r\n\r\n resultado.setHours(0, 0, 0, 0);\r\n\r\n const diaSemana = resultado.getDay();\r\n const diasVoltar = diaSemana === 0 ? 6 : diaSemana - 1;\r\n\r\n resultado.setDate(resultado.getDate() - diasVoltar);\r\n\r\n return resultado;\r\n }\r\n\r\n atualizarMesAno(data: Date): void {\r\n this.mesSelecionado = data.getMonth();\r\n this.anoSelecionado = data.getFullYear();\r\n }\r\n\r\n gerarSemana(dataReferencia: Date): void {\r\n const segunda = this.obterSegundaFeira(dataReferencia);\r\n\r\n this.dataReferenciaSemana = new Date(segunda);\r\n\r\n const domingo = new Date(segunda);\r\n\r\n domingo.setDate(domingo.getDate() - 1);\r\n\r\n this.diasSemana = [];\r\n\r\n for (\r\n let i = 0;\r\n i < 7;\r\n i++\r\n ) {\r\n const data = new Date(domingo);\r\n\r\n data.setDate(domingo.getDate() + i);\r\n\r\n this.diasSemana.push({\r\n data,\r\n numero: data.getDate(),\r\n nome: this.nomesDias[data.getDay()],\r\n hoje: this.ehHoje(data)\r\n });\r\n }\r\n }\r\n\r\n gerarHorarios(): void {\r\n this.horarios = [];\r\n\r\n const minutoInicio = this.horaInicio * 60;\r\n const minutoFim = (this.horaFim * 60) + 30;\r\n\r\n for (\r\n let minutoAtual = minutoInicio;\r\n minutoAtual <= minutoFim;\r\n minutoAtual += this.intervaloMinutos\r\n ) {\r\n const hora = Math.floor(minutoAtual / 60);\r\n const minuto = minutoAtual % 60;\r\n\r\n this.horarios.push(`${hora.toString().padStart(2, '0')}:${minuto.toString().padStart(2, '0')}`);\r\n }\r\n }\r\n\r\n ehHoje(data: Date): boolean {\r\n const hoje = new Date();\r\n\r\n return (data.getDate() === hoje.getDate() && data.getMonth() === hoje.getMonth() && data.getFullYear() === hoje.getFullYear());\r\n }\r\n\r\n getItem(dia: Date, horario: string): AgendaSemanalItem | undefined {\r\n return this.itens.find(item => {\r\n if (!item.DataHora) {\r\n return false;\r\n }\r\n\r\n const dataHora = new Date(item.DataHora);\r\n\r\n return (this.mesmaData(dataHora, dia) && this.formatarHorario(dataHora) === horario);\r\n });\r\n }\r\n\r\n async aplicarHorariosPadrao(data: Date): Promise<void> {\r\n if (!this.horariosPadrao.length) {\r\n const alert = await this.alertController.create({\r\n header: 'Horários Padrões',\r\n message: 'Nenhum horário padrão foi configurado.',\r\n buttons: ['OK']\r\n });\r\n\r\n await alert.present();\r\n return;\r\n }\r\n\r\n const dataFormatada = new Date(data).toLocaleDateString('pt-BR');\r\n\r\n const alert = await this.alertController.create({\r\n header: 'Horários Padrões',\r\n message: `Deseja adicionar os horários padrões no dia ${dataFormatada}?`,\r\n buttons: [{ text: 'Cancelar', role: 'cancel' }, { text: 'Adicionar', handler: () => { this.confirmarAplicacaoHorariosPadrao(data); } }]\r\n });\r\n\r\n await alert.present();\r\n }\r\n\r\n confirmarAplicacaoHorariosPadrao(data: Date): void {\r\n if (!this.horariosPadrao.length) {\r\n return;\r\n }\r\n\r\n const horariosExistentes = new Set<string>();\r\n\r\n this.itens.forEach(item => {\r\n if (!item.DataHora) {\r\n return;\r\n }\r\n\r\n const dataHora = new Date(item.DataHora);\r\n\r\n if (!this.mesmaData(dataHora, data)) {\r\n return;\r\n }\r\n\r\n horariosExistentes.add(this.formatarHorario(dataHora));\r\n });\r\n\r\n this.horariosPadrao.forEach(horario => {\r\n if (!this.horarios.includes(horario)) {\r\n return;\r\n }\r\n\r\n if (horariosExistentes.has(horario)) {\r\n return;\r\n }\r\n\r\n const dataHora = this.criarDataHora(data, horario);\r\n\r\n this.horarioSelecionado.emit({ DataHora: dataHora });\r\n\r\n horariosExistentes.add(horario);\r\n });\r\n }\r\n\r\n duploCliqueHorario(dia: Date, horario: string): void {\r\n const item = this.getItem(dia, horario);\r\n\r\n if (item) {\r\n this.itemSelecionado.emit({\r\n ...item\r\n });\r\n\r\n return;\r\n }\r\n\r\n this.horarioSelecionado.emit({ DataHora: this.criarDataHora(dia, horario) });\r\n }\r\n\r\n criarDataHora(dia: Date, horario: string): Date {\r\n const data = new Date(dia);\r\n const [hora, minuto] = horario.split(':');\r\n\r\n data.setHours(Number(hora), Number(minuto), 0, 0);\r\n\r\n return data;\r\n }\r\n\r\n mesmaData(\r\n data1: Date,\r\n data2: Date\r\n ): boolean {\r\n return (data1.getDate() === data2.getDate() && data1.getMonth() === data2.getMonth() && data1.getFullYear() === data2.getFullYear());\r\n }\r\n\r\n formatarHorario(data: Date): string {\r\n const hora = data.getHours().toString().padStart(2, '0');\r\n const minuto = data.getMinutes().toString().padStart(2, '0');\r\n\r\n return `${hora}:${minuto}`;\r\n }\r\n}\r\n","<div style=\"width:100%;box-sizing:border-box;\">\r\n <!-- LEGENDAS -->\r\n @if (legendas.length > 0 || textoAjuda) {\r\n <ion-row\r\n style=\"align-items:center;margin-bottom:8px;padding:6px 4px;min-height:70px;border-bottom:1px solid #cbd5e1;\">\r\n @for (legenda of legendas; track legenda.Texto) {\r\n <ion-col size=\"auto\">\r\n <div style=\"display:flex;align-items:center;gap:5px;\">\r\n <span [ngClass]=\"legenda.ClasseCss\"\r\n style=\"display:inline-block;width:18px;height:18px;border:1px solid #64748b;\">\r\n </span>\r\n <span style=\"font-size:18px;color:#475569;\">\r\n {{ legenda.Texto }}\r\n </span>\r\n </div>\r\n </ion-col>\r\n }\r\n\r\n @if (textoAjuda) {\r\n <ion-col style=\"display:flex;height:100%;justify-content:end;align-self:end;\">\r\n <div style=\"font-size:14px;color:#475569;\">\r\n {{ textoAjuda }}\r\n </div>\r\n </ion-col>\r\n }\r\n </ion-row>\r\n }\r\n\r\n <!-- GRADE -->\r\n <div style=\"width:100%;max-height:610px;overflow:auto;border:1px solid #475569;background:#ffffff;\">\r\n <table style=\"width:100%;min-width:900px;border-collapse:collapse;table-layout:fixed;font-size:12px;\">\r\n <!-- CABEÇALHO -->\r\n <thead style=\"position:sticky;top:0;z-index:10;background:#ffffff;\">\r\n <tr>\r\n <!-- MÊS / ANO -->\r\n <th\r\n style=\"width:90px;height:64px;padding:2px;border-right:1px solid #475569;border-bottom:1px solid #475569;background:#ffffff;\">\r\n <div style=\"font-size:10px;font-weight:400;color:#475569;\">\r\n {{ anoSelecionado }}\r\n </div>\r\n\r\n <div style=\"display:flex;align-items:center;justify-content:space-between;padding:0 2px;\">\r\n <button type=\"button\" (click)=\"mesAnterior()\"\r\n style=\"border:0;background:transparent;padding:0;cursor:pointer;\">\r\n <ion-icon name=\"chevron-back-outline\" style=\"font-size:16px;color:#334155;\">\r\n </ion-icon>\r\n </button>\r\n\r\n <span style=\"font-size:25px;line-height:1;font-weight:700;color:#84cc16;\">\r\n {{ numeroMes }}\r\n </span>\r\n\r\n <button type=\"button\" (click)=\"proximoMes()\"\r\n style=\"border:0;background:transparent;padding:0;cursor:pointer;\">\r\n <ion-icon name=\"chevron-forward-outline\" style=\"font-size:16px;color:#334155;\">\r\n </ion-icon>\r\n </button>\r\n </div>\r\n\r\n <div style=\"font-size:9px;color:#475569;margin-top:2px;\">\r\n {{ nomeMes }}\r\n </div>\r\n </th>\r\n\r\n <!-- DIAS -->\r\n @for (dia of diasSemana; track dia.data.getTime(); let primeiro = $first; let ultimo = $last) {\r\n <th [style.background]=\"dia.hoje ? '#fff7ed' : '#ffffff'\"\r\n style=\"height:64px;padding:3px;border-right:1px solid #475569;border-bottom:1px solid #475569;text-align:center;position:relative;\">\r\n\r\n @if (primeiro) {\r\n <button type=\"button\" (click)=\"semanaAnterior()\"\r\n style=\"position:absolute;left:3px;top:22px;border:0;background:transparent;padding:0;cursor:pointer;\">\r\n <ion-icon name=\"chevron-back-outline\" style=\"font-size:15px;color:#334155;\">\r\n </ion-icon>\r\n </button>\r\n }\r\n\r\n <div (dblclick)=\"aplicarHorariosPadrao(dia.data)\"\r\n [style.color]=\"dia.hoje ? '#fb923c' : '#134e4a'\"\r\n title=\"Duplo clique para aplicar os horários padrões\"\r\n style=\"font-size:24px;font-weight:700;line-height:1.1;cursor:pointer;user-select:none;\">\r\n {{ dia.numero }}\r\n </div>\r\n\r\n <div [style.color]=\"dia.hoje ? '#fb923c' : '#111827'\"\r\n style=\"font-size:11px;font-weight:700;margin-top:3px;\">\r\n {{ dia.nome }}\r\n </div>\r\n\r\n @if (ultimo) {\r\n <button type=\"button\" (click)=\"proximaSemana()\"\r\n style=\"position:absolute;right:3px;top:22px;border:0;background:transparent;padding:0;cursor:pointer;\">\r\n <ion-icon name=\"chevron-forward-outline\" style=\"font-size:15px;color:#334155;\">\r\n </ion-icon>\r\n </button>\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <!-- CORPO -->\r\n <tbody>\r\n @for (horario of horarios; track horario) {\r\n <tr>\r\n <!-- HORÁRIO -->\r\n <td\r\n style=\"width:90px;height:29px;padding:1px 4px;text-align:center;font-size:13px;color:#1e293b;background:#ffffff;border-right:1px solid #475569;border-bottom:1px solid #94a3b8;\">\r\n {{ horario }}\r\n </td>\r\n\r\n <!-- DIAS -->\r\n @for (dia of diasSemana; track dia.data.getTime()) {\r\n @let item = getItem(dia.data, horario);\r\n\r\n <td (dblclick)=\"duploCliqueHorario(dia.data, horario)\" [ngClass]=\"item?.ClasseCss || ''\"\r\n style=\"height:29px;padding:0;text-align:center;vertical-align:middle;cursor:pointer;border-right:1px solid #475569;border-bottom:1px solid #94a3b8;user-select:none;overflow:hidden;\">\r\n\r\n @if (item?.Texto) {\r\n <div\r\n style=\"width:100%;height:100%;min-height:27px;display:flex;align-items:center;justify-content:center;padding:1px 3px;box-sizing:border-box;overflow:hidden;\">\r\n <span\r\n style=\"font-size:9px;font-weight:600;line-height:1.05;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\">\r\n {{ item?.Texto }}\r\n </span>\r\n </div>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseBtnComponent implements OnInit {\r\n @Input() disabled: boolean = false;\r\n @Input() type: string = 'submit';\r\n @Input() icon: string = 'checkmark-outline';\r\n @Input() iconSrc: string = '';\r\n @Input() title: string = 'Salvar';\r\n @Input() fill: string = 'outline';\r\n @Input() expand: string = 'block';\r\n @Output() btnClick = new EventEmitter();\r\n @Input() size: string = 'default';\r\n @Input() iconSlot: string = 'start';\r\n @Input() color: string = 'primary';\r\n @Input() hint: string = '';\r\n\r\n ngOnInit(): void {\r\n return;\r\n }\r\n\r\n onClick() {\r\n if (this.btnClick)\r\n this.btnClick.emit();\r\n }\r\n\r\n resolveTheme(theme: string) {\r\n //console.log('resolve theme', theme);\r\n // if (theme == 'default') {\r\n // this.fill = 'outline';\r\n // } else {\r\n // this.fill = 'solid';\r\n // }\r\n if (theme == 'windows-theme') {\r\n this.fill = 'solid';\r\n }\r\n }\r\n}","import { Component, Input, OnInit } from '@angular/core';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\n\r\n@Component({\r\n selector: 'kb-btn-action',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-action.html',\r\n styleUrl: './btn-action.scss',\r\n})\r\nexport class BtnActionComponent extends BaseBtnComponent implements OnInit {\r\n @Input() override title: string = 'Abrir';\r\n @Input() override color: string = 'primary';\r\n @Input() hidden: boolean = false;\r\n @Input() override icon: string = '';\r\n @Input() override iconSrc: string = '';\r\n @Input() imgSrc: string = '';\r\n @Input() boxColor: string = '#4c8dff';\r\n @Input() btnMargin: string = '4px';\r\n @Input() override expand: string = 'block';\r\n @Input() iconStyle: string = '';\r\n @Input() titleStyle: string = '';\r\n buttonStyle: string = ''; \r\n constructor() {\r\n super();\r\n this.type = 'button';\r\n }\r\n\r\n override ngOnInit() {\r\n this.buttonStyle = ''; \r\n } \r\n\r\n}\r\n\r\n","<ion-button [color]=\"color\" [type]=\"type\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" [size]=\"size\"\n [hidden]=\"hidden\" (click)=\"onClick()\" class=\"kb-btn-action\"\n [title]=\"hint\">\n @if (icon || iconSrc) {\n <ion-icon [slot]=\"title ? iconSlot : 'icon-only'\" [name]=\"icon\" [src]=\"iconSrc\" [style]=\"iconStyle\"></ion-icon>\n }\n <span [style]=\"titleStyle\">{{ title }}</span>\n @if (imgSrc) {\n <img [src]=\"imgSrc\" [slot]=\"title ? iconSlot : 'icon-only'\" />\n }\n</ion-button>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\n\r\n@Component({\r\n selector: 'kb-btn-cancelar',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-cancelar.html',\r\n styleUrl: './btn-cancelar.scss',\r\n})\r\nexport class BtnCancelarComponent extends BaseBtnComponent implements OnInit {\r\n //@Input() override iconSrc = \"/assets/icon/limpar_purple_24dp.svg\";\r\n @Input() override icon = \"close-outline\";\r\n @Input() override title: string = 'Cancelar';\r\n @Input() override color: string = 'tertiary';\r\n //@Input() override icon: string = '';\r\n constructor() { \r\n super();\r\n this.type = 'button';\r\n } \r\n\r\n}\r\n","<ion-button [color]=\"color\" [type]=\"type\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" \n [size]=\"size\" class=\"kb-btn-cancelar\"\n (click)=\"onClick()\"\n [title]=\"hint\"> \n <ion-icon [slot]=\"title ? 'start' : 'icon-only'\" [src]=\"iconSrc\" [name]=\"icon\"></ion-icon>\n {{ title }}\n</ion-button> \n<!-- \n<ion-button color=\"tertiary\" fill=\"outline\" (click)=\"cancelarContato()\" style=\"box-shadow: #6370ff 0px 3px 3px 0.05px\"\n [disabled]=\"!selectedContato\">\n <ion-icon src=\"/assets/icon/limpar_purple_24dp.svg\"></ion-icon>\n Cancelar\n</ion-button>\n-->","import { Component, Input, OnInit } from '@angular/core';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\n\r\n@Component({\r\n selector: 'kb-btn-excluir',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-excluir.html',\r\n styleUrl: './btn-excluir.scss',\r\n})\r\nexport class BtnExcluirComponent extends BaseBtnComponent implements OnInit {\r\n @Input() override type: string = 'button';\r\n @Input() override expand: string = 'inline';\r\n @Input() override icon: string = 'trash'; \r\n @Input() override title: string = 'Excluir'; \r\n @Input() override color: string = 'danger';\r\n constructor() { \r\n super();\r\n }\r\n \r\n}\r\n","<ion-button [color]=\"color\" [type]=\"type\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" [size]=\"size\"\n (click)=\"onClick()\"\n [title]=\"hint\">\n @if (icon) {\n <ion-icon [slot]=\"title ? 'start' : 'icon-only'\" [name]=\"icon\"></ion-icon>\n }\n {{ title }}\n</ion-button>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\n\r\n@Component({\r\n selector: 'kb-btn-novo',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-novo.html',\r\n styleUrl: './btn-novo.scss',\r\n})\r\nexport class BtnNovoComponent extends BaseBtnComponent implements OnInit {\r\n @Input() override title: string = 'Novo';\r\n @Input() override icon: string = 'person-add'; \r\n @Input() override iconSrc: string = '';\r\n @Input() override expand: string = 'block';\r\n @Input() imgSrc: string = '';\r\n @Input() override color: string = 'primary';\r\n constructor() {\r\n super();\r\n this.type = 'button'; \r\n }\r\n \r\n}\r\n\r\n","<ion-button [color]=\"color\" [type]=\"type\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" [size]=\"size\"\n (click)=\"onClick()\" class=\"kb-btn-novo\"\n [title]=\"hint\">\n @if (icon || iconSrc) {\n <ion-icon [slot]=\"title ? 'start' : 'icon-only'\" [name]=\"icon\" [src]=\"iconSrc\"></ion-icon>\n }\n {{ title }}\n @if (imgSrc) {\n <img [src]=\"imgSrc\" [slot]=\"title ? 'start' : 'icon-only'\" />\n }\n</ion-button>\n<!-- \n<ion-button (click)=\"novoContato()\" fill=\"outline\" style=\"box-shadow: #4c8dff 0px 3px 3px 0.05px\">\n <ion-icon slot=\"start\" name=\"person-add\"></ion-icon>\n Novo\n</ion-button>\n-->","import { Component, Input, OnInit } from '@angular/core';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\n\r\n@Component({\r\n selector: 'kb-btn-salvar',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-salvar.html',\r\n styleUrl: './btn-salvar.scss',\r\n})\r\nexport class BtnSalvarComponent extends BaseBtnComponent implements OnInit {\r\n @Input() btnMargin: string = '4px';\r\n @Input() override color: string = 'success';\r\n constructor() { \r\n super();\r\n } \r\n \r\n}\r\n","<ion-button [color]=\"color\" [type]=\"type\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" [size]=\"size\"\n (click)=\"onClick()\" [style.margin]=\"btnMargin\" class=\"kb-btn-salvar\"\n [title]=\"hint\">\n <ion-icon [slot]=\"title ? 'start' : 'icon-only'\" [name]=\"icon\"></ion-icon>\n {{ title }}\n</ion-button>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { BaseBtnComponent } from '../baseBtnComponents';\r\nimport { IonButton, IonIcon } from \"@ionic/angular\";\r\n\r\n@Component({\r\n selector: 'kb-btn-rounded',\r\n imports: [IonIcon, IonButton, ],\r\n templateUrl: './btn-rounded.html',\r\n styleUrl: './btn-rounded.scss',\r\n})\r\nexport class BtnRoundedComponent extends BaseBtnComponent implements OnInit {\r\n @Input() override title: string = 'Ok';\r\n @Input() override icon: string = ''; \r\n @Input() override iconSrc: string = '';\r\n @Input() override expand: string = 'inline';\r\n @Input() imgSrc: string = '';\r\n @Input() override color: string = 'primary';\r\n @Input() override fill: string = 'solid';\r\n constructor() {\r\n super();\r\n this.type = 'button'; \r\n }\r\n \r\n}\r\n\r\n","<ion-button [color]=\"color\" [type]=\"type\" shape=\"round\" [disabled]=\"disabled\" [fill]=\"fill\" [expand]=\"expand\" [size]=\"size\"\n (click)=\"onClick()\" class=\"kb-btn-rounded\"\n [title]=\"hint\">\n @if (icon || iconSrc) {\n <ion-icon [slot]=\"title ? 'start' : 'icon-only'\" [name]=\"icon\" [src]=\"iconSrc\"></ion-icon>\n }\n <!-- \n {{ title }}\n -->\n @if (title) {\n <span [innerHTML]=\"title\"></span>\n }\n @if (imgSrc) {\n <img [src]=\"imgSrc\" [slot]=\"title ? 'start' : 'icon-only'\" />\n }\n</ion-button>\n<!-- \n<ion-button (click)=\"novoContato()\" fill=\"outline\" style=\"box-shadow: #4c8dff 0px 3px 3px 0.05px\">\n <ion-icon slot=\"start\" name=\"person-add\"></ion-icon>\n Novo\n</ion-button>\n-->","import { Component } from '@angular/core';\n\n@Component({\n selector: 'kb-titulo',\n imports: [],\n templateUrl: './titulo.html',\n styleUrl: './titulo.scss',\n})\nexport class TituloComponent {}\n","<div>\n <h4 class=\"kb-titulo\">\n <ng-content></ng-content>\n </h4>\n</div>","/*\r\n * Public API Surface of appproject-framework\r\n */\r\n\r\nexport * from './lib/appproject-framework';\r\n\r\nexport * from './lib/services/lib.service';\r\nexport * from './lib/model/base-model';\r\nexport * from './lib/model/html-campo';\r\nexport * from './lib/model/html-row';\r\nexport * from './lib/model/pesquisa-campo';\r\nexport * from './lib/model/page-result';\r\nexport * from './lib/model/decorators';\r\nexport * from './lib/pipes/nome.pipe';\r\nexport * from './lib/pipes/valor-format.pipe';\r\nexport * from './lib/pipes/safe-html.pipe';\r\nexport * from './lib/model/tree-model';\r\nexport * from './lib/model/grid-tabela';\r\nexport * from './lib/model/evento-cadastro';\r\nexport * from './lib/model/evento-foco';\r\nexport * from './lib/model/intervalo';\r\nexport * from './lib/model/agenda-semanal-horario';\r\n\r\n//utils\r\nexport * from './utils/utils-geral.service';\r\nexport * from './utils/dominio';\r\nexport * from './utils/estado';\r\n\r\n//entity\r\nexport * from './entity/services/utils.service';\r\nexport * from './entity/services/base-entity';\r\nexport * from './entity/services/base-alerts';\r\nexport * from './entity/services/data.service';\r\nexport * from './entity/page/base-cadastro';\r\nexport * from './entity/page/base-page';\r\nexport * from './entity/services/cadastro.service';\r\n//lib config para data service\r\nexport * from './entity/services/lib-config';\r\nexport * from './entity/services/lib-config.token';\r\n\r\n//components\r\nexport * from './components/baseInputComponent';\r\nexport * from './components/input-text/input-text';\r\nexport * from './components/input-pesquisa/input-pesquisa';\r\nexport * from './components/input-area/input-area';\r\nexport * from './components/input-cep/input-cep';\r\nexport * from './components/input-valor/input-valor';\r\nexport * from './components/input-checkbox/input-checkbox';\r\nexport * from './components/input-format/input-format';\r\nexport * from './components/input-select/input-select';\r\nexport * from './components/input-radio/input-radio';\r\nexport * from './components/entity-edit/entity-edit';\r\nexport * from './components/grid-view/grid-view';\r\nexport * from './components/periodo-intervalo/periodo-intervalo';\r\nexport * from './components/input-html/input-html';\r\nexport * from './components/input-arquivo/input-arquivo';\r\nexport * from './components/agenda-semanal/agenda-semanal';\r\n//buttons\r\nexport * from './components/buttons/btn-action/btn-action';\r\nexport * from './components/buttons/btn-cancelar/btn-cancelar';\r\nexport * from './components/buttons/btn-excluir/btn-excluir';\r\nexport * from './components/buttons/btn-novo/btn-novo';\r\nexport * from './components/buttons/btn-salvar/btn-salvar';\r\nexport * from './components/buttons/btn-rounded/btn-rounded';\r\n//header\r\nexport * from './components/titulo/titulo';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["decorators.getRequired","decorators.getMinLength","decorators.getMaxLength","decorators.getEmail","decorators.getPattern","decorators.getMin","decorators.getMax","decorators.getIgnore","decorators.getTipo","decorators.getPosicao","decorators.getLabel","decorators.getPlaceholder","decorators.getReadOnly","decorators.getFormatted","i1","i2.CadastroService","i1.DataService"],"mappings":"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"}