удаления поправлены, сортировка элементов в титре поправлено, обоюдное удаление поправлено
This commit is contained in:
@@ -1338,10 +1338,26 @@
|
||||
}
|
||||
|
||||
function mappingInventoryInputs(profile) {
|
||||
// Preserve the exact Input sequence received from the vMix API via Agent.
|
||||
// The array order is presentation-only: stable Mapping identity still uses
|
||||
// key -> unique title -> number, so changing Input positions does not break links.
|
||||
return Array.isArray(profile?.inventory?.inputs) ? [...profile.inventory.inputs] : [];
|
||||
// Mapping picker is operator-facing: show Inputs in vMix numeric order so a
|
||||
// title can be found by its familiar # quickly. Stable links still use key/title.
|
||||
const inputs = Array.isArray(profile?.inventory?.inputs) ? [...profile.inventory.inputs] : [];
|
||||
return inputs.sort((left, right) => {
|
||||
const leftNumber = Number(left?.number);
|
||||
const rightNumber = Number(right?.number);
|
||||
const leftRank = Number.isFinite(leftNumber) ? leftNumber : Number.MAX_SAFE_INTEGER;
|
||||
const rightRank = Number.isFinite(rightNumber) ? rightNumber : Number.MAX_SAFE_INTEGER;
|
||||
return leftRank - rightRank
|
||||
|| String(left?.title || "").localeCompare(String(right?.title || ""), "ru", { numeric: true, sensitivity: "base" });
|
||||
});
|
||||
}
|
||||
|
||||
function mappingVmixFieldOrder(left, right) {
|
||||
// Natural sort keeps Player2.Text before Player10.Text and makes long GT
|
||||
// templates much easier to scan. Type suffix stays part of the comparison.
|
||||
return String(left?.name || "").localeCompare(String(right?.name || ""), "ru", {
|
||||
numeric: true,
|
||||
sensitivity: "base",
|
||||
});
|
||||
}
|
||||
|
||||
function mappingInputByKey(profile, key, title = "") {
|
||||
@@ -1939,7 +1955,7 @@
|
||||
const visibleInputs = filteredInputs.some((item) => mappingInputValue(item) === mappingInputValue(currentInput))
|
||||
? filteredInputs
|
||||
: [currentInput, ...filteredInputs];
|
||||
const allFields = currentInput.fields || [];
|
||||
const allFields = [...(currentInput.fields || [])].sort(mappingVmixFieldOrder);
|
||||
const filter = ["text", "image", "color"].includes(state.mappingFieldFilter) ? state.mappingFieldFilter : "text";
|
||||
const counts = {
|
||||
text: allFields.filter((field) => mappingFieldFilterMatch(field, "text")).length,
|
||||
|
||||
Reference in New Issue
Block a user