12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import _ from "lodash";
- export const s3ContentsToTree = (
- s3Contents,
- props = {},
- reducer: (...args: unknown[]) => Record<string, unknown> = () => ({})
- ) => {
- let __result = [];
- let level = { __result, __prefix: "" };
- props = Object.assign(
- {
- key: "key",
- label: "label",
- children: "children",
- },
- props
- );
- s3Contents.forEach((s3Content) => {
- s3Content.Key.split("/").reduce((r, label, i, a) => {
- if (!r[label]) {
- const __prefix = `${r.__prefix ? r.__prefix + "/" : ""}${label}`;
- r[label] = { __result: [], __prefix };
- r.__result.push({
- [props.key]: __prefix,
- [props.label]: label,
- [props.children]: r[label].__result,
- // NOTE 这里要小心覆盖掉props.key props.label props.children
- ...reducer(r, label, i, a, s3Content),
- });
- }
- return r[label];
- }, level);
- });
- return __result;
- };
- export const trimTreeForSideBar = (tree) => {
- }
- type TreeNodeLike = {
- children?: TreeNodeLike[];
- };
- export const getTreeLeafs = <T extends TreeNodeLike>(treeNode: T): T[] => {
- if (treeNode.children?.length) {
- return _.flatMap<T, T>(treeNode.children as T[], getTreeLeafs);
- }
- return [treeNode];
- };
|