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 --- .../views/nodes/DataVizBox/DocCreatorMenu.tsx | 43 +++++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) (limited to 'src/client/views/nodes/DataVizBox') 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