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 | |
parent | f00a5326fa331859db131bb1d8988db93602830b (diff) |
template matching algorithm
-rw-r--r-- | src/client/views/MainView.tsx | 1 | ||||
-rw-r--r-- | src/client/views/nodes/DataVizBox/DocCreatorMenu.tsx | 43 |
2 files changed, 37 insertions, 7 deletions
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<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], |