// Função para carregar o TOM SELECT com estilo/dados da empresa
function loadSelectEmpresa(elemento = '#selectEmpresaChamado', placeholder = 'SELECIONE A EMPRESA') {
const ts = new TomSelect(`${elemento}`, {
maxItems: 1,
create: false,
allowEmptyOption: true,
placeholder: placeholder,
persist: false,
searchField: ['cnpj', 'nome', 'fantasia'],
render: {
no_results(data, escape) {
return `
Nenhum resultado encontrado
`;
},
option(data, escape) {
if (data.value == 0) {
return ` TODAS EMPRESAS
`;
} else if (data.value == -1) {
return `SELECIONE A EMPRESA
`
}
const cnpj = escape(data.cnpj);
const nome = escape(data.nome);
const nomeFantasia = escape(data.fantasia);
const inativo = escape(data.inativo);
return `
${cnpj}
${nome}
${nomeFantasia}
`;
},
item(data, escape) {
if (data.value == 0) {
return ` TODAS EMPRESAS
`;
} else if (data.value == -1) {
return `SELECIONE A EMPRESA
`
}
const cnpj = escape(data.cnpj);
const nome = escape(data.nome);
const inativo = escape(data.inativo);
return `
${nome}
(${cnpj})
`;
}
}
});
return ts;
}
function loadSelectUsuario(elemento = '#selectAtendenteFiltroChamados', placeholderFull = '', allText = 'ATENDENTES', selectText = 'ATENDENTE') {
new TomSelect(`${elemento}`, {
maxItems: 1,
create: false,
allowEmptyOption: true,
placeholder: placeholderFull == '' ? `SELECIONE O ${selectText}` : placeholderFull,
persist: false,
searchField: ['cnpj', 'nome', 'fantasia'],
render: {
no_results(data, escape) {
return `Nenhum resultado encontrado
`;
},
option(data, escape) {
if (data.value == 0) {
return ` TODOS ${allText}
`;
} else if (data.value == -1) {
const texto = placeholderFull == '' ? `SELECIONE O ${selectText}` : placeholderFull;
return `${texto}
`
}
const nome = escape(data.nome);
const email = escape(data.email);
const foto = escape(data.foto);
const srcFoto = foto ? URL_ARQUIVOS + '/' + foto : DEFAULT_PICTURE;
return `
${nome}
${email}
`;
},
item(data, escape) {
if (data.value == 0) {
return ` TODOS ${allText}
`;
} else if (data.value == -1) {
const texto = placeholderFull == '' ? `SELECIONE O ${selectText}` : placeholderFull;
return `${texto}
`
}
const nome = escape(data.nome);
const foto = escape(data.foto);
const email = escape(data.email);
const srcFoto = foto ? URL_ARQUIVOS + '/' + foto : DEFAULT_PICTURE;
return `
${nome}
(${email})
`;
}
}
});
}
function loadSelectTiposDemanda(elemento = '#selectTiposDemanda') {
const ts = new TomSelect(`${elemento}`, {
maxItems: 1,
create: false,
allowEmptyOption: true,
placeholder: 'SELECIONE O TIPO DE DEMANDA',
persist: false,
searchField: ['descricao', 'modelo'],
render: {
no_results(data, escape) {
return `Nenhum resultado encontrado
`;
},
option(data, escape) {
if (data.value == -1) {
return `SELECIONE O TIPO DE DEMANDA
`;
}
const descricao = escape(data.descricao || data.text);
const tituloModelo = escape(data.modelo || '');
let etiquetasHtml = '';
if (data.etiquetas && data.etiquetas !== '') {
let etiquetas = [];
try {
if (typeof data.etiquetas === 'string') {
etiquetas = JSON.parse(data.etiquetas);
} else if (Array.isArray(data.etiquetas)) {
etiquetas = data.etiquetas;
}
} catch (e) {
console.warn('Erro ao converter etiquetas:', data.etiquetas);
etiquetas = [];
}
etiquetas.forEach(etq => {
etiquetasHtml += `
${escape(etq.nome)}
`;
});
}
return `
${descricao}
${tituloModelo}
${etiquetasHtml}
`;
},
item(data, escape) {
if (data.value == -1) {
return `SELECIONE O TIPO DE DEMANDA
`;
}
const descricao = escape(data.descricao || data.text);
return `
${descricao}
`;
}
}
});
return ts;
}
function showTomSelectLoader(tsInstance, position = 'start') {
if (!tsInstance || !tsInstance.wrapper) return;
const control = tsInstance.wrapper.querySelector('.ts-control');
// Evita duplicação
if (control.querySelector('.ts-loader')) return;
const loader = document.createElement('div');
loader.classList.add('ts-loader');
loader.innerHTML = `
Loading...
`;
if (position === 'start') {
control.prepend(loader);
} else {
control.append(loader);
}
control.classList.add('ts-loading');
}
function hideTomSelectLoader(tsInstance) {
if (!tsInstance || !tsInstance.wrapper) return;
const control = tsInstance.wrapper.querySelector('.ts-control');
const loader = control.querySelector('.ts-loader');
if (loader) loader.remove();
control.classList.remove('ts-loading');
}
function resetTomSelectPlaceholder(ts, placeholder) {
ts.clear(true); // limpa seleção
ts.settings.placeholder = placeholder;
if (ts.control_input) {
ts.control_input.placeholder = placeholder;
}
ts.refreshState();
}