feat: нумерация и сортировка вариантов конфигурации по дате создания
Список вариантов в выпадающем меню теперь сортируется по created_at (старый сверху) и нумеруется; исправлен наследуемый крупный жирный шрифт в выпадашке.
This commit is contained in:
@@ -1555,6 +1555,7 @@ func setupRouter(cfg *config.Config, local *localdb.LocalDB, connMgr *db.Connect
|
|||||||
Variant string `json:"variant"`
|
Variant string `json:"variant"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
IsActive bool `json:"is_active"`
|
IsActive bool `json:"is_active"`
|
||||||
|
CreatedAt time.Time `json:"created_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
simplified := make([]ProjectSimple, 0, len(allProjects))
|
simplified := make([]ProjectSimple, 0, len(allProjects))
|
||||||
@@ -1565,6 +1566,7 @@ func setupRouter(cfg *config.Config, local *localdb.LocalDB, connMgr *db.Connect
|
|||||||
Variant: p.Variant,
|
Variant: p.Variant,
|
||||||
Name: derefString(p.Name),
|
Name: derefString(p.Name),
|
||||||
IsActive: p.IsActive,
|
IsActive: p.IsActive,
|
||||||
|
CreatedAt: p.CreatedAt,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,8 @@
|
|||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
<div id="project-variant-menu" class="absolute left-0 mt-2 min-w-[10rem] rounded-lg border border-gray-200 bg-white shadow-lg hidden z-10">
|
<div id="project-variant-menu" class="absolute left-0 mt-2 w-max max-w-xs min-w-[12rem] rounded-lg border border-gray-200 bg-white shadow-lg hidden z-10 text-sm font-normal">
|
||||||
<div id="project-variant-list" class="py-1"></div>
|
<div id="project-variant-list" class="py-1 max-h-72 overflow-y-auto"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button onclick="openNewVariantModal()" class="inline-flex w-full sm:w-auto justify-center items-center px-3 py-1.5 text-sm font-medium bg-purple-600 text-white rounded-lg hover:bg-purple-700">
|
<button onclick="openNewVariantModal()" class="inline-flex w-full sm:w-auto justify-center items-center px-3 py-1.5 text-sm font-medium bg-purple-600 text-white rounded-lg hover:bg-purple-700">
|
||||||
@@ -380,8 +380,8 @@ async function loadVariantsForCode(code) {
|
|||||||
}
|
}
|
||||||
projectVariants = allProjects
|
projectVariants = allProjects
|
||||||
.filter(p => (p.code || '').trim() === code && p.is_active !== false)
|
.filter(p => (p.code || '').trim() === code && p.is_active !== false)
|
||||||
.map(p => ({uuid: p.uuid, variant: (p.variant || '').trim()}));
|
.map(p => ({uuid: p.uuid, variant: (p.variant || '').trim(), createdAt: p.created_at || ''}));
|
||||||
projectVariants.sort((a, b) => normalizeVariantLabel(a.variant).localeCompare(normalizeVariantLabel(b.variant)));
|
projectVariants.sort((a, b) => new Date(a.createdAt) - new Date(b.createdAt));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
@@ -397,7 +397,7 @@ function renderVariantSelect() {
|
|||||||
list.innerHTML = '';
|
list.innerHTML = '';
|
||||||
const variants = projectVariants.length ? projectVariants : [{uuid: projectUUID, variant: (project && project.variant) || ''}];
|
const variants = projectVariants.length ? projectVariants : [{uuid: projectUUID, variant: (project && project.variant) || ''}];
|
||||||
let mainUUID = '';
|
let mainUUID = '';
|
||||||
variants.forEach(item => {
|
variants.forEach((item, index) => {
|
||||||
const variantLabel = normalizeVariantLabel(item.variant);
|
const variantLabel = normalizeVariantLabel(item.variant);
|
||||||
if (variantLabel === 'main' && !mainUUID) {
|
if (variantLabel === 'main' && !mainUUID) {
|
||||||
mainUUID = item.uuid;
|
mainUUID = item.uuid;
|
||||||
@@ -410,7 +410,7 @@ function renderVariantSelect() {
|
|||||||
label.textContent = variantLabel;
|
label.textContent = variantLabel;
|
||||||
document.title = (project && project.code ? project.code : '—') + ' / ' + variantLabel + ' — OFS';
|
document.title = (project && project.code ? project.code : '—') + ' / ' + variantLabel + ' — OFS';
|
||||||
}
|
}
|
||||||
option.textContent = variantLabel;
|
option.textContent = (index + 1) + '. ' + variantLabel;
|
||||||
option.onclick = function() {
|
option.onclick = function() {
|
||||||
menu.classList.add('hidden');
|
menu.classList.add('hidden');
|
||||||
if (item.uuid && item.uuid !== projectUUID) {
|
if (item.uuid && item.uuid !== projectUUID) {
|
||||||
|
|||||||
Reference in New Issue
Block a user