From 971459577b1e11efb5eb1e91dbb4ac5d75735cf6 Mon Sep 17 00:00:00 2001 From: Nathan-SR <144961007+Nathan-SR@users.noreply.github.com> Date: Wed, 28 Aug 2024 01:25:31 -0400 Subject: template matching algorithm --- src/client/views/MainView.tsx | 1 - .../views/nodes/DataVizBox/DocCreatorMenu.tsx | 43 +++++++++++++++++++--- 2 files changed, 37 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx index 9c350afc0..2a937d403 100644 --- a/src/client/views/MainView.tsx +++ b/src/client/views/MainView.tsx @@ -592,7 +592,6 @@ export class MainView extends ObservableReactComponent<{}> { else break; } if (!targClass.includes('contextMenu')) { - console.log(targClass) ContextMenu.Instance.closeMenu(); } !['timeline-menu-desc', 'timeline-menu-item', 'timeline-menu-input'].includes(targClass) && TimelineMenu.Instance.closeMenu(); diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu.tsx b/src/client/views/nodes/DataVizBox/DocCreatorMenu.tsx index ffc4dd0b1..449d61a65 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu.tsx +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu.tsx @@ -39,7 +39,7 @@ export enum LayoutType { } @observer -export class DocCreatorMenu extends ObservableReactComponent { +export class DocCreatorMenu extends ObservableReactComponent { static Instance: DocCreatorMenu; @@ -812,8 +812,19 @@ export class DocCreatorMenu extends ObservableReactComponent { + matchesForTemplate = (template: TemplateDocInfos, cols: Col[]): number[][] => { + const colMatchesField = (col: Col, field : Field) => { return field.sizes?.includes(col.size) && field.types.includes(col.type) }; + const matches: number[][] = Array(template.fields.length); + template.fields.forEach((field, i) => { + cols.forEach((col, v) => { + if (colMatchesField(col, field)) { + matches[i].push(v); + } + }); + }); + + return matches; } maxMatches = (fieldsCt: number, matches: number[][]) => { @@ -833,18 +844,29 @@ export class DocCreatorMenu extends ObservableReactComponent { + const validTemplates: TemplateDocInfos[] = []; + templates.forEach(template => { + const numFields = template.fields.length; + const matches = this.matchesForTemplate(template, cols); + if (this.maxMatches(numFields, matches) === numFields) { + validTemplates.push(template); + } + }) } get dashboardContents(){ @@ -1022,6 +1044,15 @@ enum FieldSize { HUGE = 'huge' } + +type Col = { + size: FieldSize; + content: string; + desc: string; + title: string; + type: FieldType; +} + type Field = { tl: [number, number], br: [number, number], -- cgit v1.2.3-70-g09d2