analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
175 lines (168 loc) • 6.19 kB
JavaScript
// src/utils/utils.ts
import { clsx } from "clsx";
import { twMerge } from "tailwind-merge";
// src/utils/dropdown.ts
var syncDropdownState = (open, isActive, setActiveStates, key) => {
if (!open && isActive) {
setActiveStates((prev) => ({ ...prev, [key]: false }));
}
};
// src/utils/arraysEqual.ts
function arraysEqual(a, b, comparator) {
if (a.length !== b.length) return false;
if (a.length === 0 && b.length === 0) return true;
if (comparator) {
const sortedA2 = [...a].sort(comparator);
const sortedB2 = [...b].sort(comparator);
return sortedA2.every((val, index) => val === sortedB2[index]);
}
const sortedA = [...a].sort((x, y) => String(x).localeCompare(String(y)));
const sortedB = [...b].sort((x, y) => String(x).localeCompare(String(y)));
return sortedA.every((val, index) => val === sortedB[index]);
}
// src/utils/activityFilters.ts
function getSelectedIdsFromCategories(categories, keys) {
const result = {};
for (const [outputKey, categoryKey] of Object.entries(keys)) {
const category = categories.find((c) => c.key === categoryKey);
result[outputKey] = category?.selectedIds || [];
}
return result;
}
function toggleArrayItem(array, item) {
return array.includes(item) ? array.filter((i) => i !== item) : [...array, item];
}
function toggleSingleValue(currentValue, newValue) {
return currentValue === newValue ? null : newValue;
}
function areFiltersEqual(filters1, filters2) {
if (filters1 === filters2) return true;
if (!filters1 || !filters2) return false;
return arraysEqual(filters1.types, filters2.types) && arraysEqual(filters1.bankIds, filters2.bankIds) && arraysEqual(filters1.yearIds, filters2.yearIds) && arraysEqual(filters1.subjectIds, filters2.subjectIds) && arraysEqual(filters1.topicIds, filters2.topicIds) && arraysEqual(filters1.subtopicIds, filters2.subtopicIds) && arraysEqual(filters1.contentIds, filters2.contentIds);
}
function isValidBankYearItem(item, bankIds) {
return !!item && typeof item.id === "string" && typeof item.bankId === "string" && bankIds.includes(item.bankId);
}
function deriveYearIdsFromBankIds(yearItens, bankIds, explicitYearIds) {
if (explicitYearIds.length > 0) {
return explicitYearIds;
}
return yearItens.filter((item) => isValidBankYearItem(item, bankIds)).map((item) => item.id);
}
function mergeYearIdsForSelectedBanks(yearItens, bankIds, explicitYearIds) {
const validYears = yearItens.filter(
(item) => isValidBankYearItem(item, bankIds)
);
const explicitSet = new Set(explicitYearIds);
const result = new Set(explicitYearIds);
for (const bankId of bankIds) {
const yearsForBank = validYears.filter((year) => year.bankId === bankId);
const hasExplicitYear = yearsForBank.some(
(year) => explicitSet.has(year.id)
);
if (!hasExplicitYear) {
yearsForBank.forEach((year) => result.add(year.id));
}
}
return Array.from(result);
}
// src/utils/questionTypeUtils.ts
function mapQuestionTypeToEnum(type, fallback) {
const upperType = type.toUpperCase();
const typeMap = {
ALTERNATIVA: "ALTERNATIVA" /* ALTERNATIVA */,
DISSERTATIVA: "DISSERTATIVA" /* DISSERTATIVA */,
MULTIPLA_ESCOLHA: "MULTIPLA_ESCOLHA" /* MULTIPLA_ESCOLHA */,
VERDADEIRO_FALSO: "VERDADEIRO_FALSO" /* VERDADEIRO_FALSO */,
IMAGEM: "IMAGEM" /* IMAGEM */,
RELACIONAR: "RELACIONAR" /* RELACIONAR */,
PREENCHER_LACUNAS: "PREENCHER_LACUNAS" /* PREENCHER_LACUNAS */
};
return typeMap[upperType] ?? fallback ?? null;
}
function mapQuestionTypeToEnumRequired(type, fallback = "ALTERNATIVA" /* ALTERNATIVA */) {
return mapQuestionTypeToEnum(type, fallback) ?? fallback;
}
// src/utils/formatScore.ts
function formatScore(value, scoreType) {
if (scoreType === "tri" /* TRI */) {
return Math.round(value).toString();
}
return `${value.toFixed(1).replace(".", ",")}%`;
}
// src/utils/utils.ts
function cn(...inputs) {
return twMerge(clsx(inputs));
}
function formatPercentageRounded(value) {
return `${Math.round(value)}%`;
}
function hexToRgba(hex, opacity) {
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
if (!result) return `rgba(107, 114, 128, ${opacity})`;
const r = Number.parseInt(result[1], 16);
const g = Number.parseInt(result[2], 16);
const b = Number.parseInt(result[3], 16);
return `rgba(${r}, ${g}, ${b}, ${opacity})`;
}
function bgClassToCssVar(bgClass) {
return `var(--color-${bgClass.replace("bg-", "")})`;
}
function polarToCartesian(cx, cy, r, angleDeg) {
const rad = (angleDeg - 90) * Math.PI / 180;
return { x: cx + r * Math.cos(rad), y: cy + r * Math.sin(rad) };
}
function describeArc(cx, cy, r, startAngle, endAngle) {
const span = endAngle - startAngle;
if (span >= 359.99) {
const midAngle = startAngle + 180;
const s2 = polarToCartesian(cx, cy, r, startAngle);
const m = polarToCartesian(cx, cy, r, midAngle);
return `M ${cx} ${cy} L ${s2.x} ${s2.y} A ${r} ${r} 0 1 1 ${m.x} ${m.y} A ${r} ${r} 0 1 1 ${s2.x} ${s2.y} Z`;
}
const s = polarToCartesian(cx, cy, r, endAngle);
const e = polarToCartesian(cx, cy, r, startAngle);
const largeArc = span > 180 ? 1 : 0;
return `M ${cx} ${cy} L ${s.x} ${s.y} A ${r} ${r} 0 ${largeArc} 0 ${e.x} ${e.y} Z`;
}
function getSubjectColorWithOpacity(hexColor, isDark) {
if (!hexColor) return void 0;
let color = hexColor.replace(/^#/, "").toLowerCase();
if (isDark) {
if (color.length === 8) {
color = color.slice(0, 6);
}
return `#${color}`;
} else {
let resultColor;
if (color.length === 6) {
resultColor = `#${color}4d`;
} else if (color.length === 8) {
resultColor = `#${color}`;
} else {
resultColor = `#${color}`;
}
return resultColor;
}
}
export {
syncDropdownState,
arraysEqual,
getSelectedIdsFromCategories,
toggleArrayItem,
toggleSingleValue,
areFiltersEqual,
deriveYearIdsFromBankIds,
mergeYearIdsForSelectedBanks,
mapQuestionTypeToEnum,
mapQuestionTypeToEnumRequired,
formatScore,
cn,
formatPercentageRounded,
hexToRgba,
bgClassToCssVar,
polarToCartesian,
describeArc,
getSubjectColorWithOpacity
};
//# sourceMappingURL=chunk-53ICLDGS.mjs.map