diff --git a/src/pages/QuestionsMap/elements.ts b/src/pages/QuestionsMap/elements.ts index 1f4e0025..bb773aa8 100644 --- a/src/pages/QuestionsMap/elements.ts +++ b/src/pages/QuestionsMap/elements.ts @@ -47,6 +47,23 @@ export const VERTICES: Vertex[] = [ "point_25", ], }, + { id: "point_333", label: "Вопрос 333", level: 2 }, + { id: "point_334", label: "Вопрос 334", level: 2 }, + { id: "point_335", label: "Вопрос 335", level: 2 }, + { id: "point_336", label: "Вопрос 336", level: 2 }, + { id: "point_337", label: "Вопрос 337", level: 2 }, + { id: "point_338", label: "Вопрос 338", level: 2 }, + { id: "point_339", label: "Вопрос 339", level: 2 }, + { id: "point_340", label: "Вопрос 340", level: 2 }, + { id: "point_341", label: "Вопрос 341", level: 2 }, + { id: "point_342", label: "Вопрос 342", level: 2 }, + { id: "point_343", label: "Вопрос 343", level: 2 }, + { id: "point_344", label: "Вопрос 344", level: 2 }, + { id: "point_345", label: "Вопрос 345", level: 2 }, + { id: "point_346", label: "Вопрос 346", level: 2 }, + { id: "point_347", label: "Вопрос 347", level: 2 }, + { id: "point_348", label: "Вопрос 348", level: 2 }, + { id: "point_349", label: "Вопрос 349", level: 2 }, { id: "point_3", label: "Вопрос 3", level: 2 }, { id: "point_4", label: "Вопрос 4", level: 2 }, { @@ -93,7 +110,12 @@ export const VERTICES: Vertex[] = [ { id: "point_11", label: "Вопрос 11", level: 2 }, { id: "point_12", label: "Вопрос 12", level: 2 }, { id: "point_13", label: "Вопрос 13", level: 2 }, - { id: "point_14", label: "Вопрос 14", level: 3 }, + { + id: "point_14", + label: "Вопрос 14", + level: 3, + edges: ["point_61", "point_62", "point_63"], + }, { id: "point_15", label: "Вопрос 15", level: 3 }, { id: "point_16", label: "Вопрос 16", level: 3 }, { id: "point_17", label: "Вопрос 17", level: 3 }, @@ -122,13 +144,6 @@ export const VERTICES: Vertex[] = [ level: 3, edges: ["point_38", "point_39", "point_40", "point_41"], }, - { id: "point_38", label: "Вопрос 38", level: 4 }, - { id: "point_39", label: "Вопрос 39", level: 4 }, - { id: "point_40", label: "Вопрос 40", level: 4 }, - { id: "point_41", label: "Вопрос 41", level: 4 }, - { id: "point_42", label: "Вопрос 42", level: 4 }, - { id: "point_43", label: "Вопрос 43", level: 4 }, - { id: "point_44", label: "Вопрос 44", level: 4 }, { id: "point_45", label: "Вопрос 45", level: 3 }, { id: "point_46", label: "Вопрос 46", level: 3 }, { id: "point_47", label: "Вопрос 47", level: 3 }, @@ -140,6 +155,26 @@ export const VERTICES: Vertex[] = [ { id: "point_53", label: "Вопрос 53", level: 3 }, { id: "point_54", label: "Вопрос 54", level: 3 }, { id: "point_55", label: "Вопрос 55", level: 3 }, + { id: "point_61", label: "Вопрос 61", level: 4 }, + { id: "point_62", label: "Вопрос 62", level: 4 }, + { id: "point_63", label: "Вопрос 63", level: 4 }, + { id: "point_38", label: "Вопрос 38", level: 4 }, + { + id: "point_39", + label: "Вопрос 39", + level: 4, + edges: ["point_56", "point_57", "point_58", "point_59", "point_60"], + }, + { id: "point_40", label: "Вопрос 40", level: 4 }, + { id: "point_41", label: "Вопрос 41", level: 4 }, + { id: "point_42", label: "Вопрос 42", level: 4 }, + { id: "point_43", label: "Вопрос 43", level: 4 }, + { id: "point_44", label: "Вопрос 44", level: 4 }, + { id: "point_56", label: "Вопрос 56", level: 5 }, + { id: "point_57", label: "Вопрос 57", level: 5 }, + { id: "point_58", label: "Вопрос 58", level: 5 }, + { id: "point_59", label: "Вопрос 59", level: 5 }, + { id: "point_60", label: "Вопрос 60", level: 5 }, // { id: "point_", label: "Вопрос " }, ]; diff --git a/src/pages/QuestionsMap/helper.ts b/src/pages/QuestionsMap/helper.ts index de9a13db..e3e669c5 100644 --- a/src/pages/QuestionsMap/helper.ts +++ b/src/pages/QuestionsMap/helper.ts @@ -15,25 +15,54 @@ const sortElementsByLevel = (vertices: Vertex[]): Record => { return sortedVertices; }; -const getEmptyVertexIndents = ( +const getCurrentIndent = ( + id: string, + edges: string[] | undefined, + vertices: Vertex[] +): number => { + let currentIndent = 0; + + if (!edges?.length) { + return 100; + } + + const calculatePointIndent = (pointId: string) => { + const point = vertices.find(({ id }) => pointId === id); + + if (point?.edges) { + currentIndent += point.edges.length * 100; + + point.edges.forEach((edge) => { + console.log(id, currentIndent); + calculatePointIndent(edge); + }); + } + }; + + calculatePointIndent(id); + + return currentIndent; +}; + +const getVertexIndent = ( elements: ElementDefinition[], vertices: Vertex[], id: string, indent: number, currentIndent: number, level: number -): number[] => { +): number => { let topIndent = indent + currentIndent; - const indents: number[] = []; + let indentResult: number = 0; - elements.forEach(({ data, position }) => { + for (const { data, position } of elements) { const isEmptyVertex = position?.y === topIndent && - position?.x === level * 250 - 250 && + position?.x === (level - 1) * 250 && vertices.find((item) => item.id === data.id && !item.edges?.length); if (!isEmptyVertex) { - return; + continue; } const parentVertex = vertices.find(({ edges }) => edges?.includes(id)); @@ -48,17 +77,14 @@ const getEmptyVertexIndents = ( topIndent += 200; if (indent < minTopIndent) { - indent = minTopIndent; - indents.push(minTopIndent); + indentResult = minTopIndent; - return; + break; } - - indents.push(topIndent); } - }); + } - return indents; + return indentResult; }; export const createGraphElements = ( @@ -71,9 +97,9 @@ export const createGraphElements = ( Object.values(sortedVertices).forEach((vertexItems) => { let indent = 0; - vertexItems.forEach(({ id, label, level, edges }, index) => { - const currentIndent = edges?.length ? edges?.length * 100 : 100; - const emptyVertexIndents = getEmptyVertexIndents( + vertexItems.forEach(({ id, label, level, edges }) => { + const currentIndent = getCurrentIndent(id, edges, vertices); + const emptyVertexIndent = getVertexIndent( elements, vertices, id, @@ -82,9 +108,7 @@ export const createGraphElements = ( level ); - if (emptyVertexIndents.length) { - indent = emptyVertexIndents[index] || indent; - } + indent = emptyVertexIndent || indent; elements.push({ data: { id, label },