diff options
author | Nathan-SR <144961007+Nathan-SR@users.noreply.github.com> | 2024-08-28 01:25:31 -0400 |
---|---|---|
committer | Nathan-SR <144961007+Nathan-SR@users.noreply.github.com> | 2024-08-28 01:25:31 -0400 |
commit | 971459577b1e11efb5eb1e91dbb4ac5d75735cf6 (patch) | |
tree | d5bb00b1e978d25ff05210a96f91c61398e5b256 /src/client/views/nodes/DataVizBox/DocCreatorMenu.tsx | |
parent | f00a5326fa331859db131bb1d8988db93602830b (diff) |
template matching algorithm
Diffstat (limited to 'src/client/views/nodes/DataVizBox/DocCreatorMenu.tsx')
-rw-r--r-- | src/client/views/nodes/DataVizBox/DocCreatorMenu.tsx | 43 |
1 files changed, 37 insertions, 6 deletions
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<FieldViewProps & CollectionFreeFormView> { +export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> { static Instance: DocCreatorMenu; @@ -812,8 +812,19 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps & Co this.forceUpdate(); } - findMatches = () => { + 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<FieldViewProps & Co } for (let v = 0; v < fieldsCt; ++v) { - console.log(v) used.fill(false); augmentingPath(v); } - let numMatches: number = 0; + let count: number = 0; for (let i = 0; i < fieldsCt; ++i) { - if (mt[i] !== -1) ++numMatches; + if (mt[i] !== -1) ++count; } - return numMatches; + return count; + } + + + findValidTemplates = (cols: Col[], templates: TemplateDocInfos[]) => { + 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], |