analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
189 lines (186 loc) • 5.6 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/components/BreadcrumbMenu/useBreadcrumbBuilder.ts
var useBreadcrumbBuilder_exports = {};
__export(useBreadcrumbBuilder_exports, {
useBreadcrumbBuilder: () => useBreadcrumbBuilder
});
module.exports = __toCommonJS(useBreadcrumbBuilder_exports);
var import_react = require("react");
// src/components/BreadcrumbMenu/breadcrumbStore.ts
var import_zustand = require("zustand");
var useBreadcrumbStore = (0, import_zustand.create)((set, get) => ({
breadcrumbs: {},
setBreadcrumbs: (namespace, items) => {
set((state) => ({
breadcrumbs: {
...state.breadcrumbs,
[namespace]: items
}
}));
},
addBreadcrumb: (namespace, item) => {
set((state) => {
const current = state.breadcrumbs[namespace] || [];
return {
breadcrumbs: {
...state.breadcrumbs,
[namespace]: [...current, item]
}
};
});
},
updateBreadcrumb: (namespace, itemId, updates) => {
set((state) => {
const current = state.breadcrumbs[namespace] || [];
return {
breadcrumbs: {
...state.breadcrumbs,
[namespace]: current.map(
(item) => item.id === itemId ? { ...item, ...updates } : item
)
}
};
});
},
removeBreadcrumbFrom: (namespace, itemId) => {
set((state) => {
const current = state.breadcrumbs[namespace] || [];
const index = current.findIndex((item) => item.id === itemId);
if (index === -1) return state;
return {
breadcrumbs: {
...state.breadcrumbs,
[namespace]: current.slice(0, index)
}
};
});
},
sliceBreadcrumbs: (namespace, index) => {
set((state) => {
const current = state.breadcrumbs[namespace] || [];
return {
breadcrumbs: {
...state.breadcrumbs,
[namespace]: current.slice(0, index + 1)
}
};
});
},
clearBreadcrumbs: (namespace) => {
set((state) => {
const { [namespace]: _, ...rest } = state.breadcrumbs;
return {
breadcrumbs: rest
};
});
},
getBreadcrumbs: (namespace) => {
return get().breadcrumbs[namespace] || [];
}
}));
var useBreadcrumb = (namespace) => {
const store = useBreadcrumbStore();
const breadcrumbs = store.breadcrumbs[namespace] || [];
return {
breadcrumbs,
/**
* Define todos os breadcrumbs de uma vez
*/
setBreadcrumbs: (items) => {
store.setBreadcrumbs(namespace, items);
},
/**
* Adiciona um novo breadcrumb ao final
*/
addBreadcrumb: (item) => {
store.addBreadcrumb(namespace, item);
},
/**
* Atualiza um breadcrumb existente
*/
updateBreadcrumb: (itemId, updates) => {
store.updateBreadcrumb(namespace, itemId, updates);
},
/**
* Remove um breadcrumb e todos os seguintes
*/
removeBreadcrumbFrom: (itemId) => {
store.removeBreadcrumbFrom(namespace, itemId);
},
/**
* Mantém apenas os breadcrumbs até o índice especificado (inclusivo)
*/
sliceBreadcrumbs: (index) => {
store.sliceBreadcrumbs(namespace, index);
},
/**
* Limpa todos os breadcrumbs
*/
clearBreadcrumbs: () => {
store.clearBreadcrumbs(namespace);
}
};
};
// src/components/BreadcrumbMenu/useBreadcrumbBuilder.ts
var isBreadcrumbWithData = (level) => {
return "data" in level;
};
var useBreadcrumbBuilder = (config) => {
const { namespace, root, levels } = config;
const { breadcrumbs, setBreadcrumbs, sliceBreadcrumbs } = useBreadcrumb(namespace);
const levelDependencies = levels.map(
(level) => isBreadcrumbWithData(level) ? level.data : null
);
const levelUrlIds = levels.map((level) => level.urlId);
(0, import_react.useEffect)(() => {
const newBreadcrumbs = [root];
const previousIds = [];
for (const level of levels) {
const { urlId } = level;
if (isBreadcrumbWithData(level)) {
const { data, getId, getName, getUrl } = level;
if (!data) break;
const dataId = getId(data);
if (urlId === void 0 || dataId !== urlId) break;
newBreadcrumbs.push({
id: dataId,
name: getName(data),
url: getUrl(data, previousIds)
});
previousIds.push(dataId);
} else {
const { breadcrumb } = level;
if (urlId === void 0) break;
newBreadcrumbs.push(breadcrumb);
previousIds.push(breadcrumb.id);
}
}
setBreadcrumbs(newBreadcrumbs);
}, [namespace, ...levelDependencies, ...levelUrlIds, root.id]);
return {
breadcrumbs,
sliceBreadcrumbs
};
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
useBreadcrumbBuilder
});
//# sourceMappingURL=index.js.map