feat: Enhance auto URL processing to include domain management and improve error handling; update UI text for clarity in ASNs, Domains, and IPRanges managers
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 18m27s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 18m27s
This commit is contained in:
@@ -407,8 +407,8 @@ function ASNsNewManager() {
|
||||
disableExport={items.length === 0}
|
||||
onClear={clearInvalid}
|
||||
disableClear={items.length === 0}
|
||||
onClearCommunities={() => setClearCommunitiesOpen(true)}
|
||||
disableClearCommunities={items.length === 0}
|
||||
onClearCommunities={() => { if (!filterCommunity) { setError('Выберите community в фильтре для очистки'); return; } setClearCommunitiesOpen(true); }}
|
||||
disableClearCommunities={items.length === 0 || !filterCommunity}
|
||||
onSave={handleSaveChanges}
|
||||
disableSave={loading}
|
||||
onHistory={() => setHistoryOpen(true)}
|
||||
@@ -694,11 +694,11 @@ function ASNsNewManager() {
|
||||
/>
|
||||
<ConfirmDialog
|
||||
open={clearCommunitiesOpen}
|
||||
title={'Очистить все community?'}
|
||||
message={'Поле community будет очищено у всех записей в таблице. Это действие не сохраняет изменения автоматически.'}
|
||||
confirmText={'Очистить'}
|
||||
title={'Удалить записи community'}
|
||||
message={`Будут удалены все записи с community "${filterCommunity}". Действие НЕ сохраняет изменения автоматически.`}
|
||||
confirmText={'Удалить'}
|
||||
cancelText={'Отмена'}
|
||||
onConfirm={() => { setItems(prev => prev.map(i => ({ ...i, community: '' }))); setClearCommunitiesOpen(false); }}
|
||||
onConfirm={() => { setItems(prev => prev.filter(i => i.community !== filterCommunity)); setClearCommunitiesOpen(false); }}
|
||||
onCancel={() => setClearCommunitiesOpen(false)}
|
||||
/>
|
||||
{/* datalist больше не нужен, т.к. используем кастомный автокомплит */}
|
||||
|
||||
@@ -158,7 +158,7 @@ function AutoUrlManager() {
|
||||
<div className="row align-items-center">
|
||||
<div className="col">
|
||||
<h2 className="page-title">Автоматические URL</h2>
|
||||
<div className="page-pretitle">Управление автоматическими URL-адресами для загрузки IP-списков</div>
|
||||
<div className="page-pretitle">Управление автоматическими URL-адресами для загрузки списков IP и доменов</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -338,7 +338,7 @@ function AutoUrlManager() {
|
||||
) : (
|
||||
<>
|
||||
<IconDownload className="me-1" />
|
||||
Загрузить IP-списки
|
||||
Загрузить списки
|
||||
</>
|
||||
)}
|
||||
</button>
|
||||
@@ -358,7 +358,7 @@ function AutoUrlManager() {
|
||||
<ul className="list-unstyled m-0">
|
||||
<li className="d-flex align-items-start mb-2">
|
||||
<span className="text-blue me-2"><IconCircleCheck size={18} /></span>
|
||||
<span>Добавьте URL-адреса, которые содержат списки IP-адресов</span>
|
||||
<span>Добавьте URL-адреса, которые содержат списки IP-адресов или доменных имён</span>
|
||||
</li>
|
||||
<li className="d-flex align-items-start mb-2">
|
||||
<span className="text-blue me-2"><IconCircleCheck size={18} /></span>
|
||||
@@ -366,11 +366,11 @@ function AutoUrlManager() {
|
||||
</li>
|
||||
<li className="d-flex align-items-start mb-2">
|
||||
<span className="text-blue me-2"><IconCircleCheck size={18} /></span>
|
||||
<span>Нажмите «Загрузить IP-списки» для обработки всех URL</span>
|
||||
<span>Нажмите «Загрузить списки» для обработки всех URL</span>
|
||||
</li>
|
||||
<li className="d-flex align-items-start">
|
||||
<span className="text-blue me-2"><IconCircleCheck size={18} /></span>
|
||||
<span>IP-адреса будут добавлены в файл <code>bgp_data/ips.txt</code></span>
|
||||
<span>IP-диапазоны попадут в <code>bgp_data/ips.txt</code>, домены — в <code>bgp_data/domains_community.txt</code></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -414,8 +414,8 @@ function DomainsNewManager() {
|
||||
disableExport={items.length === 0}
|
||||
onClear={clearInvalid}
|
||||
disableClear={items.length === 0}
|
||||
onClearCommunities={() => setClearCommunitiesOpen(true)}
|
||||
disableClearCommunities={items.length === 0}
|
||||
onClearCommunities={() => { if (!filterCommunity) { setError('Выберите community в фильтре для очистки'); return; } setClearCommunitiesOpen(true); }}
|
||||
disableClearCommunities={items.length === 0 || !filterCommunity}
|
||||
onSave={handleSaveChanges}
|
||||
disableSave={loading}
|
||||
onHistory={() => setHistoryOpen(true)}
|
||||
@@ -703,11 +703,11 @@ function DomainsNewManager() {
|
||||
/>
|
||||
<ConfirmDialog
|
||||
open={clearCommunitiesOpen}
|
||||
title={'Очистить все community?'}
|
||||
message={'Поле community будет очищено у всех доменов. Это действие не сохраняет изменения автоматически.'}
|
||||
confirmText={'Очистить'}
|
||||
title={'Удалить записи community'}
|
||||
message={`Будут удалены все домены с community "${filterCommunity}". Действие НЕ сохраняет изменения автоматически.`}
|
||||
confirmText={'Удалить'}
|
||||
cancelText={'Отмена'}
|
||||
onConfirm={() => { setItems(prev => prev.map(i => ({ ...i, community: '' }))); setClearCommunitiesOpen(false); }}
|
||||
onConfirm={() => { setItems(prev => prev.filter(i => i.community !== filterCommunity)); setClearCommunitiesOpen(false); }}
|
||||
onCancel={() => setClearCommunitiesOpen(false)}
|
||||
/>
|
||||
{/* Diff Modal */}
|
||||
|
||||
@@ -423,8 +423,8 @@ function IPRangesManager() {
|
||||
disableExport={items.length === 0}
|
||||
onClear={clearInvalid}
|
||||
disableClear={items.length === 0}
|
||||
onClearCommunities={() => setClearCommunitiesOpen(true)}
|
||||
disableClearCommunities={items.length === 0}
|
||||
onClearCommunities={() => { if (!filterCommunity) { setError('Выберите community в фильтре для очистки'); return; } setClearCommunitiesOpen(true); }}
|
||||
disableClearCommunities={items.length === 0 || !filterCommunity}
|
||||
onSave={handleSaveChanges}
|
||||
disableSave={loading}
|
||||
onHistory={() => setHistoryOpen(true)}
|
||||
@@ -715,11 +715,11 @@ function IPRangesManager() {
|
||||
/>
|
||||
<ConfirmDialog
|
||||
open={clearCommunitiesOpen}
|
||||
title={'Очистить все community?'}
|
||||
message={'Поле community будет очищено у всех IP-диапазонов. Это действие не сохраняет изменения автоматически.'}
|
||||
confirmText={'Очистить'}
|
||||
title={'Удалить записи community'}
|
||||
message={`Будут удалены все IP-диапазоны с community "${filterCommunity}". Действие НЕ сохраняет изменения автоматически.`}
|
||||
confirmText={'Удалить'}
|
||||
cancelText={'Отмена'}
|
||||
onConfirm={() => { setItems(prev => prev.map(i => ({ ...i, community: '' }))); setClearCommunitiesOpen(false); }}
|
||||
onConfirm={() => { setItems(prev => prev.filter(i => i.community !== filterCommunity)); setClearCommunitiesOpen(false); }}
|
||||
onCancel={() => setClearCommunitiesOpen(false)}
|
||||
/>
|
||||
{/* Diff Modal */}
|
||||
|
||||
@@ -94,7 +94,7 @@ function PageHeaderActions({
|
||||
</button>
|
||||
)}
|
||||
{onClearCommunities && (
|
||||
<button className="btn btn-outline-secondary" type="button" onClick={onClearCommunities} disabled={disableClearCommunities} title="Сбросить community у всех записей">
|
||||
<button className="btn btn-outline-secondary" type="button" onClick={onClearCommunities} disabled={disableClearCommunities} title="Удалить все записи выбранного community">
|
||||
<IconEraser className="me-1" /> Очистить community
|
||||
</button>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user