feat: Add useShortValue prop to CommunityAutocompleteInput and related components for improved community input handling, allowing for shorter community values to be processed.
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m50s

This commit is contained in:
2025-12-24 15:15:43 +07:00
parent 9cdcd054e7
commit f4a6ceed08
4 changed files with 21 additions and 9 deletions
+2
View File
@@ -596,6 +596,7 @@ function ASNsNewManager() {
communities={communities} communities={communities}
placeholder="Начните вводить номер или имя" placeholder="Начните вводить номер или имя"
className={`form-control${newInvalid.community ? ' is-invalid' : isValidCommunity(newItem.community) ? ' is-valid' : ''}`} className={`form-control${newInvalid.community ? ' is-invalid' : isValidCommunity(newItem.community) ? ' is-valid' : ''}`}
useShortValue={true}
/> />
</div> </div>
{newInvalid.community && <div className="invalid-feedback">Неверный формат community</div>} {newInvalid.community && <div className="invalid-feedback">Неверный формат community</div>}
@@ -869,6 +870,7 @@ function ASNsNewManager() {
onKeyDown={(e) => handleEditKeyDown(e, item.asn)} onKeyDown={(e) => handleEditKeyDown(e, item.asn)}
className={`form-control d-inline-block me-2${isValidCommunity(editingValue) ? '' : ' is-invalid'}`} className={`form-control d-inline-block me-2${isValidCommunity(editingValue) ? '' : ' is-invalid'}`}
style={{ width: '150px' }} style={{ width: '150px' }}
useShortValue={true}
/> />
<Tooltip content="Сохранить (Enter)"> <Tooltip content="Сохранить (Enter)">
<button className="btn btn-success btn-icon btn-sm me-1" onClick={() => handleSaveEdit(item.asn)} disabled={!isValidCommunity(editingValue)}><IconCheck size={16} /></button> <button className="btn btn-success btn-icon btn-sm me-1" onClick={() => handleSaveEdit(item.asn)} disabled={!isValidCommunity(editingValue)}><IconCheck size={16} /></button>
+10 -8
View File
@@ -598,6 +598,7 @@ function DomainsNewManager() {
communities={communities} communities={communities}
placeholder="Начните вводить номер или имя" placeholder="Начните вводить номер или имя"
className={`form-control${newInvalid.community ? ' is-invalid' : isValidCommunity(newItem.community) ? ' is-valid' : ''}`} className={`form-control${newInvalid.community ? ' is-invalid' : isValidCommunity(newItem.community) ? ' is-valid' : ''}`}
useShortValue={true}
/> />
</div> </div>
{newInvalid.community && <div className="invalid-feedback">Неверный формат community</div>} {newInvalid.community && <div className="invalid-feedback">Неверный формат community</div>}
@@ -881,14 +882,15 @@ function DomainsNewManager() {
<div className="btn-group"> <div className="btn-group">
{editingDomain === item.domain ? ( {editingDomain === item.domain ? (
<> <>
<CommunityAutocompleteInput <CommunityAutocompleteInput
value={editingValue} value={editingValue}
onChange={setEditingValue} onChange={setEditingValue}
communities={communities} communities={communities}
onKeyDown={(e) => handleEditKeyDown(e, item.domain)} onKeyDown={(e) => handleEditKeyDown(e, item.domain)}
className={`form-control d-inline-block me-2${isValidCommunity(editingValue) ? '' : ' is-invalid'}`} className={`form-control d-inline-block me-2${isValidCommunity(editingValue) ? '' : ' is-invalid'}`}
style={{ width: '150px' }} style={{ width: '150px' }}
/> useShortValue={true}
/>
<Tooltip content="Сохранить (Enter)"> <Tooltip content="Сохранить (Enter)">
<button <button
className="btn btn-success btn-icon btn-sm" className="btn btn-success btn-icon btn-sm"
+2
View File
@@ -856,6 +856,7 @@ function IPRangesManager() {
communities={communities} communities={communities}
placeholder="Начните вводить номер или имя" placeholder="Начните вводить номер или имя"
className={`form-control${newInvalid.community ? ' is-invalid' : isValidCommunity(newItem.community) ? ' is-valid' : ''}`} className={`form-control${newInvalid.community ? ' is-invalid' : isValidCommunity(newItem.community) ? ' is-valid' : ''}`}
useShortValue={true}
/> />
</div> </div>
{newInvalid.community && <div className="invalid-feedback">Неверный формат community</div>} {newInvalid.community && <div className="invalid-feedback">Неверный формат community</div>}
@@ -1101,6 +1102,7 @@ function IPRangesManager() {
className={`form-control d-inline-block me-2${isValidCommunity(editingValue) ? '' : ' is-invalid'}`} className={`form-control d-inline-block me-2${isValidCommunity(editingValue) ? '' : ' is-invalid'}`}
style={{ width: '150px' }} style={{ width: '150px' }}
onKeyDown={(e) => handleEditKeyDown(e, item.ipRange)} onKeyDown={(e) => handleEditKeyDown(e, item.ipRange)}
useShortValue={true}
/> />
<Tooltip content="Сохранить (Enter)"> <Tooltip content="Сохранить (Enter)">
<button className="btn btn-success btn-icon btn-sm me-1" onClick={() => handleSaveEdit(item.ipRange)} disabled={!isValidCommunity(editingValue)}><IconCheck size={16} /></button> <button className="btn btn-success btn-icon btn-sm me-1" onClick={() => handleSaveEdit(item.ipRange)} disabled={!isValidCommunity(editingValue)}><IconCheck size={16} /></button>
@@ -9,6 +9,7 @@ function CommunityAutocompleteInput({
className = 'form-control', className = 'form-control',
onSelectMeta, onSelectMeta,
maxSuggestions = 8, maxSuggestions = 8,
useShortValue = false, // если true, передавать только короткую часть community (120 вместо 65000:120)
}) { }) {
const containerRef = useRef(null); const containerRef = useRef(null);
const inputRef = useRef(null); const inputRef = useRef(null);
@@ -38,7 +39,12 @@ function CommunityAutocompleteInput({
}, []); }, []);
const selectItem = (item) => { const selectItem = (item) => {
onChange(item.value); // Если useShortValue=true, извлекаем только часть после двоеточия (если есть)
let valueToSet = item.value;
if (useShortValue && typeof item.value === 'string' && item.value.includes(':')) {
valueToSet = item.value.split(':')[1] || item.value;
}
onChange(valueToSet);
if (onSelectMeta) onSelectMeta(item); if (onSelectMeta) onSelectMeta(item);
setOpen(false); setOpen(false);
setActiveIndex(-1); setActiveIndex(-1);