prasi-lib/comps/form/field/table-edit/TableEdit.tsx

176 lines
4.8 KiB
TypeScript
Executable File

import { TableList } from "lib/comps/list/TableList";
import { useLocal } from "lib/utils/use-local";
import { FC } from "react";
import { BaseForm } from "../../base/BaseForm";
import { FMLocal } from "../../typings";
import get from "lodash.get";
export const TableEdit: FC<{
on_init: () => FMLocal;
name: string;
child: any;
PassProp: any;
item: PrasiItem;
bottom: any;
body: any;
}> = ({ on_init, name, child, PassProp, item, bottom, body }) => {
const fm = on_init();
const local = useLocal(
{
tbl: null as any,
},
() => {}
);
const value = isEditor ? [{}] :Array.isArray(fm.data[name]) ? fm.data[name] : [];
return (
<>
<div className="c-w-full c-h-full c-flex c-flex-col">
<div
className={cx(
"c-h-[50px] c-w-full",
css`
> .rdg {
overflow-y: hidden !important;
}
`
)}
style={{
height: isEditor
? 100
: value.length === 0
? 50
: value.length * 50 + 50,
}}
>
<TableList
rowHeight={50}
feature={[]}
child={child}
PassProp={PassProp}
name={""}
value={value}
on_init={() => {}}
mode={"table"}
_item={item}
gen_fields={[]}
row_click={() => {}}
selected={() => {
return false;
}}
filter_name={""}
render_col={(arg: any) => {
const { props, tbl, child } = arg;
const fm_row = { ...fm };
fm_row.data = props.row;
fm_row.render = fm.render;
local.tbl = tbl;
return (
<PassProp
idx={props.rowIdx}
row={props.row}
col={{
name: props.column.key,
value: props.row[props.column.key],
depth: props.row.__depth || 0,
}}
rows={tbl.data}
fm={fm_row}
ext_fm={{
remove: () => {
if (Array.isArray(fm.data[name])) {
fm.data[name] = value.filter(
(e: any) => e !== props.row
);
fm.render();
tbl.data = fm.data[name];
tbl.render();
}
},
add: () => {
if (Array.isArray(value)) {
value.push({});
} else {
alert("value bukan array");
}
},
}}
>
{child}
</PassProp>
);
}}
render_row={(child, data) => {
return (
<div className="c-contents">
<BaseForm
is_form={false}
data={data}
on_submit={(form) => {}}
render={fm.render}
>
{(form) => {
return <>{child}</>;
}}
</BaseForm>
</div>
);
}}
/>
</div>
<PassProp
ext_fm={{
add: () => {
if (Array.isArray(value)) {
value.push({});
fm.data[name] = value;
fm.render();
} else {
fm.data[name] = [{}];
fm.render();
}
},
}}
>
{bottom}
</PassProp>
</div>
</>
);
};
export const Footer = (
fm: FMLocal,
name: string,
PassProp: any,
child: any,
value: Array<any>
) => {
return (
<>
{/* <div>
<PassProp
ext_fm={{
remove: () => {
if (Array.isArray(fm.data[name])) {
fm.data[name] = value.filter(
(e: any) => e !== props.row
);
fm.render();
tbl.data = fm.data[name];
tbl.render();
console.log(fm.data)
}
},
add: () => {
if (Array.isArray(value)) {
value.push({});
} else {
alert("value bukan array");
}
},
}}></PassProp>
</div> */}
</>
);
};