✅ Frontend actualizado a v1.2.7
Cambios en esta versión: Fix: Selección visual de modelos ahora se muestra inmediatamente al hacer click en un proveedor Los modelos se muestran seleccionados en el formulario antes de guardar la configuración
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "checklist-frontend",
|
"name": "checklist-frontend",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.2.6",
|
"version": "1.2.7",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// Service Worker para PWA con detección de actualizaciones
|
// Service Worker para PWA con detección de actualizaciones
|
||||||
// IMPORTANTE: Actualizar esta versión cada vez que se despliegue una nueva versión
|
// IMPORTANTE: Actualizar esta versión cada vez que se despliegue una nueva versión
|
||||||
const CACHE_NAME = 'ayutec-v1.2.6';
|
const CACHE_NAME = 'ayutec-v1.2.7';
|
||||||
const urlsToCache = [
|
const urlsToCache = [
|
||||||
'/',
|
'/',
|
||||||
'/index.html'
|
'/index.html'
|
||||||
|
|||||||
@@ -680,7 +680,7 @@ function SettingsTab({ user }) {
|
|||||||
<div className="flex gap-4 mt-4">
|
<div className="flex gap-4 mt-4">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => setFormData({ ...formData, provider: 'openai' })}
|
onClick={() => setFormData({ ...formData, provider: 'openai', model_name: 'gpt-4o' })}
|
||||||
className={`p-4 border-2 rounded-lg transition ${formData.provider === 'openai' ? 'border-indigo-500 bg-indigo-50' : 'border-gray-300 hover:border-gray-400'}`}
|
className={`p-4 border-2 rounded-lg transition ${formData.provider === 'openai' ? 'border-indigo-500 bg-indigo-50' : 'border-gray-300 hover:border-gray-400'}`}
|
||||||
>
|
>
|
||||||
<div className="text-4xl mb-2">🤖</div>
|
<div className="text-4xl mb-2">🤖</div>
|
||||||
@@ -695,7 +695,7 @@ function SettingsTab({ user }) {
|
|||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => setFormData({ ...formData, provider: 'anthropic' })}
|
onClick={() => setFormData({ ...formData, provider: 'anthropic', model_name: 'claude-sonnet-4-5' })}
|
||||||
className={`p-4 border-2 rounded-lg transition ${formData.provider === 'anthropic' ? 'border-purple-500 bg-purple-50' : 'border-gray-300 hover:border-gray-400'}`}
|
className={`p-4 border-2 rounded-lg transition ${formData.provider === 'anthropic' ? 'border-purple-500 bg-purple-50' : 'border-gray-300 hover:border-gray-400'}`}
|
||||||
>
|
>
|
||||||
<div className="text-4xl mb-2">🧠</div>
|
<div className="text-4xl mb-2">🧠</div>
|
||||||
@@ -710,7 +710,7 @@ function SettingsTab({ user }) {
|
|||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => setFormData({ ...formData, provider: 'gemini' })}
|
onClick={() => setFormData({ ...formData, provider: 'gemini', model_name: 'gemini-2.5-pro' })}
|
||||||
className={`p-4 border-2 rounded-lg transition ${formData.provider === 'gemini' ? 'border-blue-500 bg-blue-50' : 'border-gray-300 hover:border-gray-400'}`}
|
className={`p-4 border-2 rounded-lg transition ${formData.provider === 'gemini' ? 'border-blue-500 bg-blue-50' : 'border-gray-300 hover:border-gray-400'}`}
|
||||||
>
|
>
|
||||||
<div className="text-4xl mb-2">✨</div>
|
<div className="text-4xl mb-2">✨</div>
|
||||||
@@ -765,16 +765,17 @@ function SettingsTab({ user }) {
|
|||||||
) : (
|
) : (
|
||||||
<div className="space-y-3">
|
<div className="space-y-3">
|
||||||
{filteredModels.map((model) => {
|
{filteredModels.map((model) => {
|
||||||
// Solo marcar como checked si este proveedor está activo Y es el modelo activo
|
// Mostrar como seleccionado si coincide con formData.model_name
|
||||||
const isActiveModel = activeProvider === formData.provider && formData.model_name === model.id;
|
// (independientemente de si el proveedor está activo o no)
|
||||||
|
const isSelected = formData.model_name === model.id;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<label key={model.id} className={`flex items-center gap-3 p-3 border rounded-lg cursor-pointer transition ${isActiveModel ? 'border-indigo-500 bg-indigo-50' : 'border-gray-300 hover:border-gray-400'}`}>
|
<label key={model.id} className={`flex items-center gap-3 p-3 border rounded-lg cursor-pointer transition ${isSelected ? 'border-indigo-500 bg-indigo-50' : 'border-gray-300 hover:border-gray-400'}`}>
|
||||||
<input
|
<input
|
||||||
type="radio"
|
type="radio"
|
||||||
name="model_name"
|
name="model_name"
|
||||||
value={model.id}
|
value={model.id}
|
||||||
checked={isActiveModel}
|
checked={isSelected}
|
||||||
onChange={() => setFormData({ ...formData, model_name: model.id })}
|
onChange={() => setFormData({ ...formData, model_name: model.id })}
|
||||||
className="form-radio text-indigo-600"
|
className="form-radio text-indigo-600"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ export default function Sidebar({ user, activeTab, setActiveTab, sidebarOpen, se
|
|||||||
className="w-10 h-10 object-contain bg-white rounded p-1"
|
className="w-10 h-10 object-contain bg-white rounded p-1"
|
||||||
/>
|
/>
|
||||||
<p className="text-xs text-indigo-300 font-medium hover:text-indigo-200">
|
<p className="text-xs text-indigo-300 font-medium hover:text-indigo-200">
|
||||||
Ayutec v1.2.6
|
Ayutec v1.2.7
|
||||||
</p>
|
</p>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user