modified: frontend/src/components/EndpointModal.tsx
This commit is contained in:
@@ -464,14 +464,26 @@ export default function EndpointModal({
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div className="border border-gray-200 rounded-lg">
|
||||||
<div className="flex items-center justify-between mb-2">
|
<div
|
||||||
<label className="block text-sm font-medium text-gray-700">
|
className="flex items-center justify-between p-3 bg-gray-50 cursor-pointer hover:bg-gray-100 rounded-t-lg"
|
||||||
SQL Запросы для скрипта
|
onClick={() => setQueriesExpanded(!queriesExpanded)}
|
||||||
</label>
|
>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
{queriesExpanded ? <ChevronUp size={18} /> : <ChevronDown size={18} />}
|
||||||
|
<label className="text-sm font-medium text-gray-700 cursor-pointer">
|
||||||
|
SQL Запросы для скрипта
|
||||||
|
{formData.script_queries.length > 0 && (
|
||||||
|
<span className="ml-2 px-2 py-0.5 bg-primary-100 text-primary-700 rounded-full text-xs">
|
||||||
|
{formData.script_queries.length}
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => {
|
onClick={(e) => {
|
||||||
|
e.stopPropagation();
|
||||||
const newQueries = [...formData.script_queries, {
|
const newQueries = [...formData.script_queries, {
|
||||||
name: '',
|
name: '',
|
||||||
sql: '',
|
sql: '',
|
||||||
@@ -483,72 +495,75 @@ export default function EndpointModal({
|
|||||||
}];
|
}];
|
||||||
setFormData({ ...formData, script_queries: newQueries });
|
setFormData({ ...formData, script_queries: newQueries });
|
||||||
setEditingQueryIndex(newQueries.length - 1);
|
setEditingQueryIndex(newQueries.length - 1);
|
||||||
|
setQueriesExpanded(true);
|
||||||
}}
|
}}
|
||||||
className="text-sm text-primary-600 hover:text-primary-700 flex items-center gap-1"
|
className="text-sm text-primary-600 hover:text-primary-700 flex items-center gap-1"
|
||||||
>
|
>
|
||||||
<Plus size={16} />
|
<Plus size={16} />
|
||||||
Добавить запрос
|
Добавить
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{formData.script_queries.length > 0 ? (
|
{queriesExpanded && (
|
||||||
<div className="space-y-2 mb-4">
|
formData.script_queries.length > 0 ? (
|
||||||
{formData.script_queries.map((query: any, idx: number) => (
|
<div className="space-y-2 p-4">
|
||||||
<div key={idx} className="border border-gray-200 rounded-lg p-4 bg-white hover:shadow-sm transition-shadow">
|
{formData.script_queries.map((query: any, idx: number) => (
|
||||||
<div className="flex items-center justify-between">
|
<div key={idx} className="border border-gray-200 rounded-lg p-4 bg-white hover:shadow-sm transition-shadow">
|
||||||
<div className="flex-1">
|
<div className="flex items-center justify-between">
|
||||||
<div className="flex items-center gap-2 mb-1">
|
<div className="flex-1">
|
||||||
<code className="text-sm font-semibold text-gray-900">{query.name || 'Безымянный запрос'}</code>
|
<div className="flex items-center gap-2 mb-1">
|
||||||
{query.database_id && (
|
<code className="text-sm font-semibold text-gray-900">{query.name || 'Безымянный запрос'}</code>
|
||||||
<>
|
{query.database_id && (
|
||||||
<span className="text-xs text-gray-500">
|
<>
|
||||||
→ {databases.find(db => db.id === query.database_id)?.name || 'БД не выбрана'}
|
<span className="text-xs text-gray-500">
|
||||||
</span>
|
→ {databases.find(db => db.id === query.database_id)?.name || 'БД не выбрана'}
|
||||||
{databases.find(db => db.id === query.database_id)?.type === 'aql' && (
|
</span>
|
||||||
<span className="text-xs bg-purple-100 text-purple-700 px-2 py-0.5 rounded">AQL</span>
|
{databases.find(db => db.id === query.database_id)?.type === 'aql' && (
|
||||||
)}
|
<span className="text-xs bg-purple-100 text-purple-700 px-2 py-0.5 rounded">AQL</span>
|
||||||
</>
|
)}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
{query.sql && (
|
||||||
|
<div className="text-xs text-gray-600 font-mono bg-gray-50 p-2 rounded mt-1 truncate">
|
||||||
|
{query.sql.substring(0, 100)}{query.sql.length > 100 ? '...' : ''}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{query.aql_endpoint && (
|
||||||
|
<div className="text-xs text-gray-600 font-mono bg-purple-50 p-2 rounded mt-1">
|
||||||
|
<span className="text-purple-700 font-semibold">{query.aql_method}</span> {query.aql_endpoint}
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{query.sql && (
|
<div className="flex gap-2 ml-4">
|
||||||
<div className="text-xs text-gray-600 font-mono bg-gray-50 p-2 rounded mt-1 truncate">
|
<button
|
||||||
{query.sql.substring(0, 100)}{query.sql.length > 100 ? '...' : ''}
|
type="button"
|
||||||
</div>
|
onClick={() => setEditingQueryIndex(idx)}
|
||||||
)}
|
className="p-2 hover:bg-blue-50 rounded text-blue-600"
|
||||||
{query.aql_endpoint && (
|
title="Редактировать запрос"
|
||||||
<div className="text-xs text-gray-600 font-mono bg-purple-50 p-2 rounded mt-1">
|
>
|
||||||
<span className="text-purple-700 font-semibold">{query.aql_method}</span> {query.aql_endpoint}
|
<Edit2 size={16} />
|
||||||
</div>
|
</button>
|
||||||
)}
|
<button
|
||||||
</div>
|
type="button"
|
||||||
<div className="flex gap-2 ml-4">
|
onClick={() => {
|
||||||
<button
|
const newQueries = formData.script_queries.filter((_: any, i: number) => i !== idx);
|
||||||
type="button"
|
setFormData({ ...formData, script_queries: newQueries });
|
||||||
onClick={() => setEditingQueryIndex(idx)}
|
}}
|
||||||
className="p-2 hover:bg-blue-50 rounded text-blue-600"
|
className="p-2 hover:bg-red-50 rounded text-red-600"
|
||||||
title="Редактировать запрос"
|
title="Удалить запрос"
|
||||||
>
|
>
|
||||||
<Edit2 size={16} />
|
<Trash2 size={16} />
|
||||||
</button>
|
</button>
|
||||||
<button
|
</div>
|
||||||
type="button"
|
|
||||||
onClick={() => {
|
|
||||||
const newQueries = formData.script_queries.filter((_: any, i: number) => i !== idx);
|
|
||||||
setFormData({ ...formData, script_queries: newQueries });
|
|
||||||
}}
|
|
||||||
className="p-2 hover:bg-red-50 rounded text-red-600"
|
|
||||||
title="Удалить запрос"
|
|
||||||
>
|
|
||||||
<Trash2 size={16} />
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
))}
|
||||||
))}
|
</div>
|
||||||
</div>
|
) : (
|
||||||
) : (
|
<div className="text-center py-6 bg-white rounded-b-lg">
|
||||||
<div className="text-center py-6 mb-4 border border-gray-200 rounded-lg bg-gray-50">
|
<p className="text-sm text-gray-500">Нет SQL запросов. Добавьте запросы для использования в скрипте.</p>
|
||||||
<p className="text-sm text-gray-500">Нет SQL запросов. Добавьте запросы для использования в скрипте.</p>
|
</div>
|
||||||
</div>
|
)
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user