pgadmin4/web/pgadmin/tools/debugger/static/js/components/DebuggerArgs.ui.js

179 lines
4.1 KiB
JavaScript

/////////////////////////////////////////////////////////////
//
// pgAdmin 4 - PostgreSQL Tools
//
// Copyright (C) 2013 - 2025, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////
import gettext from 'sources/gettext';
import BaseUISchema from 'sources/SchemaView/base_schema.ui';
class ArgementsCollectionSchema extends BaseUISchema {
constructor() {
super({
name: undefined,
type: undefined,
is_null: false,
expr: false,
value: undefined,
use_default: false,
default_value: undefined,
isArrayType: false,
isValid: true
});
}
get baseFields() {
return [
{
id: 'name',
label: gettext('Name'),
editable: false,
type: 'text',
cell: '',
},
{
id: 'type',
label: gettext('Type'),
editable: false,
type: 'text',
cell: '',
width: 30
},
{
id: 'is_null',
label: gettext('Null?'),
type: 'checkbox',
cell: 'checkbox',
width: 38,
align_center: true,
},
{
id: 'expr',
label: gettext('Expression?'),
type: 'checkbox',
cell: 'checkbox',
width: 60,
align_center: true,
},
{
id: 'value',
label: gettext('Value'),
type: 'text',
cell: (state) => {
let dtype = '';
state.isArrayType = false;
if(state.type.indexOf('[]') != -1) {
state.isArrayType = true;
dtype = 'text';
} else {
switch (state.type) {
case 'boolean':
dtype = 'checkbox';
break;
case 'integer':
case 'smallint':
case 'bigint':
case 'serial':
case 'smallserial':
case 'bigserial':
case 'oid':
case 'cid':
case 'xid':
case 'tid':
dtype = 'int';
break;
case 'real':
case 'numeric':
case 'double precision':
case 'decimal':
dtype = 'numeric';
break;
case 'string':
dtype = 'text';
break;
case 'date':
dtype = 'datetimepicker';
break;
default:
dtype = 'text';
}
}
return {
cell: dtype,
controlProps: {
...(dtype=='datetimepicker' && {
placeholder: gettext('YYYY-MM-DD'),
autoOk: true, pickerType: 'Date', ampm: false,
})
},
};
},
editable: true,
align_center: true,
disabled: (state) => state.use_default
},
{
id: 'use_default',
label: gettext('Use Default?'),
type: 'checkbox',
cell: 'checkbox',
width: 62,
disabled: (state) => state.disable_use_default
},
{
id: 'default_value',
label: gettext('Default'),
type: 'text',
editable: false,
cell: '',
},
];
}
isValidArray(val) {
val = val?.trim();
return !(val != '' && (val.charAt(0) != '{' || val.charAt(val.length - 1) != '}'));
}
validate(state, setError) {
if(state.isArrayType && state.value && state.value != '') {
let isValid = this.isValidArray(state.value);
state.isValid = isValid;
if(isValid) {
setError('value', null);
} else {
setError('value', 'Arrays must start with "{" and end with "}"');
return true;
}
} else {
state.isValid = true;
}
return false;
}
}
export class DebuggerArgumentSchema extends BaseUISchema {
constructor() {
super();
}
get baseFields() {
return [{
id: 'aregsCollection', label: gettext(''),
mode: ['edit'],
type: 'collection',
canAdd: false,
canDelete: false,
canEdit: false,
editable: false,
disabled: false,
schema: new ArgementsCollectionSchema(),
}];
}
}