Skip to content

Commit

Permalink
Added layout element containers
Browse files Browse the repository at this point in the history
  • Loading branch information
tsv2013 committed Apr 12, 2023
1 parent d9c3da2 commit b4bb265
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 0 deletions.
4 changes: 4 additions & 0 deletions sources/knockout/core/elements-container.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<!-- ko foreach: $data -->
<!-- ko component: { name: component, params: data } -->
<!-- /ko -->
<!-- /ko -->
12 changes: 12 additions & 0 deletions sources/knockout/core/elements-container.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import * as ko from "knockout";

export var elementsContainerTemplate = require("./elements-container.html").default;

ko.components.register("table4js-elements", {
viewModel: {
createViewModel: function (params, componentInfo) {
return params.elements || [];
}
},
template: elementsContainerTemplate
});
1 change: 1 addition & 0 deletions sources/knockout/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export * from "./table/filter-select";
export * from "./core/action";
export * from "./core/actions";
export * from "./core/dropdown-actions";
export * from "./core/elements-container";
export * from "./core/icon";

export * from "./table/cell-editor";
Expand Down
13 changes: 13 additions & 0 deletions sources/react/core/elements-container.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import * as React from "react";
import { ILayoutElement } from "../../table";
import { AbrisComponent } from "../abris-component";

export function ElementsContainer({ elements }: { elements: ILayoutElement[] }) {
return (
<>
{(elements || []).map((element) => {
return <AbrisComponent componentName={element.component} componentProps={element.data} />;
})}
</>
);
}
1 change: 1 addition & 0 deletions sources/react/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export * from "./table/filter-select";
export * from "./core/action";
export * from "./core/actions";
export * from "./core/dropdown-actions";
export * from "./core/elements-container";

export * from "./table/cell-editor";
export * from "./table/row-editor";
Expand Down
27 changes: 27 additions & 0 deletions sources/table/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ export interface ITablePlugin {
onSelectionChanged?(): void;
}

export interface ILayoutElement {
name: string;
container: string;
component: string;
data: any;
}

/**
* Creates Table class.
* @param config - table options.
Expand Down Expand Up @@ -495,6 +502,26 @@ export class Table extends Base implements IDataProviderOwner {
return oldOne;
}

private layoutElemets: Array<ILayoutElement> = [];
public removeLayoutElement(elementName: string): ILayoutElement {
let prevElement: ILayoutElement = undefined;
for(let i=0; i<this.layoutElemets.length; i++) {
if(this.layoutElemets[i].name === elementName) {
prevElement = this.layoutElemets.splice(i, 1)[0];
break;
}
}
return prevElement;
}
public addLayoutElement(element: ILayoutElement): ILayoutElement {
let prevElement = this.removeLayoutElement(element.name);
this.layoutElemets.push(element);
return prevElement;
}
getLayoutElements = (container?: string) => {
return this.layoutElemets.filter(element => element.container === container);
}

dispose() {
this.detach();
}
Expand Down

0 comments on commit b4bb265

Please sign in to comment.