diff --git a/web/pgadmin/static/js/SchemaView/DataGridView.jsx b/web/pgadmin/static/js/SchemaView/DataGridView.jsx
index 16128c0a2..8083ad2dd 100644
--- a/web/pgadmin/static/js/SchemaView/DataGridView.jsx
+++ b/web/pgadmin/static/js/SchemaView/DataGridView.jsx
@@ -142,7 +142,7 @@ DataTableHeader.propTypes = {
headerGroups: PropTypes.array.isRequired,
};
-function DataTableRow({row, totalRows, isResizing, schema, accessPath}) {
+function DataTableRow({row, totalRows, isResizing, schema, schemaRef, accessPath}) {
const classes = useStyles();
const [key, setKey] = useState(false);
const depListener = useContext(DepListenerContext);
@@ -151,6 +151,7 @@ function DataTableRow({row, totalRows, isResizing, schema, accessPath}) {
* We can avoid re-render by if row data is not changed
*/
+ let depsMap = _.values(row.values, Object.keys(row.values).filter((k)=>!k.startsWith('btn')));
useEffect(()=>{
/* Calculate the fields which depends on the current field
deps has info on fields which the current field depends on. */
@@ -163,13 +164,13 @@ function DataTableRow({row, totalRows, isResizing, schema, accessPath}) {
let source = accessPath.concat(dep);
if(_.isArray(dep)) {
source = dep;
+ depsMap.push(_.get(schemaRef.current.sessData, source));
}
depListener.addDepListener(source, accessPath.concat(field.id), field.depChange);
});
});
}, []);
- let depsMap = _.values(row.values, Object.keys(row.values).filter((k)=>!k.startsWith('btn')));
depsMap = depsMap.concat([totalRows, row.isExpanded, key, isResizing]);
return useMemo(()=>
@@ -198,8 +199,15 @@ export default function DataGridView({
let columns = useMemo(
()=>{
let cols = [];
+ let colInfo = {
+ Cell: ()=>{},
+ };
+ colInfo.Cell.displayName = 'Cell',
+ colInfo.Cell.propTypes = {
+ row: PropTypes.object.isRequired,
+ };
if(props.canEdit) {
- let colInfo = {
+ colInfo = {
Header: <> >,
id: 'btn-edit',
accessor: ()=>{},
@@ -220,14 +228,10 @@ export default function DataGridView({
/>;
}
};
- colInfo.Cell.displayName = 'Cell',
- colInfo.Cell.propTypes = {
- row: PropTypes.object.isRequired,
- };
cols.push(colInfo);
}
if(props.canDelete) {
- let colInfo = {
+ colInfo = {
Header: <> >,
id: 'btn-delete',
accessor: ()=>{},
@@ -257,10 +261,6 @@ export default function DataGridView({
);
}
};
- colInfo.Cell.displayName = 'Cell',
- colInfo.Cell.propTypes = {
- row: PropTypes.object.isRequired,
- };
cols.push(colInfo);
}
@@ -353,10 +353,9 @@ export default function DataGridView({
useBlockLayout,
useResizeColumns,
useSortBy,
+ useExpanded,
];
- if(props.canEdit) {
- tablePlugins.push(useExpanded);
- }
+
const {
getTableProps,
getTableBodyProps,
@@ -377,6 +376,10 @@ export default function DataGridView({
const isResizing = _.flatMap(headerGroups, headerGroup => headerGroup.headers.map(col=>col.isResizing)).includes(true);
+ if(!props.visible) {
+ return <>>;
+ }
+
return (
@@ -393,7 +396,7 @@ export default function DataGridView({
prepareRow(row);
return
+ schema={schemaRef.current} schemaRef={schemaRef} accessPath={accessPath.concat([row.index])} />
{props.canEdit && row.isExpanded &&
-1);
+ retData.modeSupported = (field.mode.indexOf(viewHelperProps.mode) > -1);
}
- if(!retData.modeSuppoted) {
+ if(!retData.modeSupported) {
return retData;
}
@@ -169,10 +169,10 @@ export default function FormView({
/* Prepare the array of components based on the types */
schema.fields.forEach((field)=>{
- let {visible, disabled, readonly, canAdd, canEdit, canDelete, modeSuppoted} =
+ let {visible, disabled, readonly, canAdd, canEdit, canDelete, modeSupported} =
getFieldMetaData(field, schema, value, viewHelperProps);
- if(modeSuppoted) {
+ if(modeSupported) {
let {group} = field;
group = groupLabels[group] || group || defaultTab;
@@ -213,12 +213,12 @@ export default function FormView({
field.schema.top = schema;
}
- depsMap.push(canAdd, canEdit, canDelete);
+ depsMap.push(canAdd, canEdit, canDelete, visible);
tabs[group].push(
useMemo(()=>, depsMap)
+ {...field} canAdd={canAdd} canEdit={canEdit} canDelete={canDelete} visible={visible}/>, depsMap)
);
} else if(field.type === 'group') {
groupLabels[field.id] = field.label;