formgen/source/logic/input/group.ts
2026-04-22 07:47:23 +02:00

99 lines
1.7 KiB
TypeScript

namespace formgen.input
{
/**
*/
type type_field<type_value> = {
name : string;
input : interface_input<type_value>;
};
/**
*/
export class class_input_group implements interface_input<Record<string, any>>
{
/**
*/
private fields : Array<type_field<any>>;
/**
*/
private label : (null | string);
/**
*/
public constructor(
fields : Array<type_field<any>>,
{
"label": label = null,
}
:
{
label ?: (null | string);
}
=
{
}
)
{
this.fields = fields;
this.label = label;
}
/**
* [implementation]
*/
public async setup(
element_target : Element
) : Promise<void>
{
const element_container : Element = document.createElement("div");
element_container.classList.add("formgen-input");
element_container.classList.add("formgen-input-group");
for (const field of this.fields)
{
const element_field : Element = document.createElement("div");
element_field.classList.add("formgen-input-group-field");
element_field.setAttribute("rel", field.name);
await field.input.setup(element_field);
element_container.appendChild(element_field);
}
element_target.appendChild(element_container);
return Promise.resolve<void>(undefined);
}
/**
* [implementation]
*/
public async read(
) : Promise<Record<string, any>>
{
let result : Record<string, any> = {};
for (const field of this.fields)
{
result[field.name] = await field.input.read();
}
return result;
}
/**
* [implementation]
*/
public write(
value : Record<string, any>
) : Promise<void>
{
return Promise.reject(new Error("not implemented"));
}
}
}