99 lines
1.7 KiB
TypeScript
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"));
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|