mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Port browser tree to React. Fixes #6129
This commit is contained in:
parent
d983225683
commit
483e2ca8d0
@ -15,6 +15,7 @@ Housekeeping
|
|||||||
************
|
************
|
||||||
|
|
||||||
| `Issue #5741 <https://redmine.postgresql.org/issues/5741>`_ - Revisit all the CREATE and DROP DDL's to add appropriate 'IF EXISTS', 'CASCADE' and 'CREATE OR REPLACE'.
|
| `Issue #5741 <https://redmine.postgresql.org/issues/5741>`_ - Revisit all the CREATE and DROP DDL's to add appropriate 'IF EXISTS', 'CASCADE' and 'CREATE OR REPLACE'.
|
||||||
|
| `Issue #6129 <https://redmine.postgresql.org/issues/6129>`_ - Port browser tree to React.
|
||||||
| `Issue #6588 <https://redmine.postgresql.org/issues/6588>`_ - Port object nodes and properties dialogs to React.
|
| `Issue #6588 <https://redmine.postgresql.org/issues/6588>`_ - Port object nodes and properties dialogs to React.
|
||||||
| `Issue #6687 <https://redmine.postgresql.org/issues/6687>`_ - Port Grant Wizard to react.
|
| `Issue #6687 <https://redmine.postgresql.org/issues/6687>`_ - Port Grant Wizard to react.
|
||||||
| `Issue #6692 <https://redmine.postgresql.org/issues/6692>`_ - Remove GPDB support completely.
|
| `Issue #6692 <https://redmine.postgresql.org/issues/6692>`_ - Remove GPDB support completely.
|
||||||
|
@ -66,7 +66,12 @@
|
|||||||
"webpack": "^5.21.2",
|
"webpack": "^5.21.2",
|
||||||
"webpack-bundle-analyzer": "^4.4.0",
|
"webpack-bundle-analyzer": "^4.4.0",
|
||||||
"webpack-cli": "^4.5.0",
|
"webpack-cli": "^4.5.0",
|
||||||
"yarn-audit-html": "^2.0.0"
|
"yarn-audit-html": "^2.0.0",
|
||||||
|
"@babel/preset-typescript": "^7.8.3",
|
||||||
|
"@babel/plugin-proposal-object-rest-spread": "^7.10.1",
|
||||||
|
"typescript": "^3.2.2",
|
||||||
|
"svgo": "^1.1.1",
|
||||||
|
"svgo-loader": "^2.2.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/plugin-proposal-class-properties": "^7.10.4",
|
"@babel/plugin-proposal-class-properties": "^7.10.4",
|
||||||
@ -144,7 +149,21 @@
|
|||||||
"xterm": "^4.11.0",
|
"xterm": "^4.11.0",
|
||||||
"xterm-addon-fit": "^0.5.0",
|
"xterm-addon-fit": "^0.5.0",
|
||||||
"xterm-addon-search": "^0.8.0",
|
"xterm-addon-search": "^0.8.0",
|
||||||
"xterm-addon-web-links": "^0.4.0"
|
"xterm-addon-web-links": "^0.4.0",
|
||||||
|
"pgadmin4-tree": "git+https://github.com/EnterpriseDB/pgadmin4-treeview/#b09740eb89595f99a925aaca9be5afa4be0fa3cc",
|
||||||
|
"react-aspen": "^1.1.0",
|
||||||
|
"@types/classnames": "^2.2.6",
|
||||||
|
"@types/react": "^16.7.18",
|
||||||
|
"@types/react-dom": "^16.0.11",
|
||||||
|
"aspen-decorations": "^1.0.2",
|
||||||
|
"browserfs": "^1.4.3",
|
||||||
|
"classnames": "^2.2.6",
|
||||||
|
"context-menu": "^2.0.0",
|
||||||
|
"insert-if": "^1.1.0",
|
||||||
|
"notificar": "^1.0.1",
|
||||||
|
"path-fx": "^2.0.0",
|
||||||
|
"valid-filename": "^2.0.1",
|
||||||
|
"url-loader": "^1.1.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"linter": "yarn eslint --no-eslintrc -c .eslintrc.js --ext .js --ext .jsx .",
|
"linter": "yarn eslint --no-eslintrc -c .eslintrc.js --ext .js --ext .jsx .",
|
||||||
|
@ -487,7 +487,7 @@ class BrowserPluginModule(PgAdminModule):
|
|||||||
browser tree.
|
browser tree.
|
||||||
"""
|
"""
|
||||||
obj = {
|
obj = {
|
||||||
"id": "%s/%s" % (node_type, node_id),
|
"id": "%s_%s" % (node_type, node_id),
|
||||||
"label": label,
|
"label": label,
|
||||||
"icon": icon,
|
"icon": icon,
|
||||||
"inode": inode,
|
"inode": inode,
|
||||||
|
@ -90,7 +90,7 @@ class CollectionNodeModule(PgAdminModule, PGChildModule):
|
|||||||
self, node_id, parent_id, label, icon, **kwargs
|
self, node_id, parent_id, label, icon, **kwargs
|
||||||
):
|
):
|
||||||
obj = {
|
obj = {
|
||||||
"id": "%s/%s" % (self.node_type, node_id),
|
"id": "%s_%s" % (self.node_type, node_id),
|
||||||
"label": label,
|
"label": label,
|
||||||
"icon": self.node_icon if not icon else icon,
|
"icon": self.node_icon if not icon else icon,
|
||||||
"inode": self.node_inode
|
"inode": self.node_inode
|
||||||
@ -107,7 +107,7 @@ class CollectionNodeModule(PgAdminModule, PGChildModule):
|
|||||||
|
|
||||||
def generate_browser_collection_node(self, parent_id, **kwargs):
|
def generate_browser_collection_node(self, parent_id, **kwargs):
|
||||||
obj = {
|
obj = {
|
||||||
"id": "coll-%s/%d" % (self.node_type, parent_id),
|
"id": "coll-%s_%d" % (self.node_type, parent_id),
|
||||||
"label": self.collection_label,
|
"label": self.collection_label,
|
||||||
"icon": self.collection_icon,
|
"icon": self.collection_icon,
|
||||||
"inode": True,
|
"inode": True,
|
||||||
|
@ -134,7 +134,7 @@ define('pgadmin.node.publication', [
|
|||||||
|
|
||||||
canCreate: function(itemData, item) {
|
canCreate: function(itemData, item) {
|
||||||
|
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
|
|
||||||
// If server is less than 10 then do not allow 'create' menu
|
// If server is less than 10 then do not allow 'create' menu
|
||||||
|
@ -48,7 +48,7 @@ export default class CollationSchema extends BaseUISchema {
|
|||||||
{
|
{
|
||||||
id: 'owner', label: gettext('Owner'),
|
id: 'owner', label: gettext('Owner'),
|
||||||
type: 'select', mode: ['properties', 'create', 'edit'],
|
type: 'select', mode: ['properties', 'create', 'edit'],
|
||||||
options: obj.ownerList
|
options: obj.ownerList, controlProps: { allowClear: false },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'schema', label: gettext('Schema'),
|
id: 'schema', label: gettext('Schema'),
|
||||||
@ -65,7 +65,7 @@ export default class CollationSchema extends BaseUISchema {
|
|||||||
res.push(d);
|
res.push(d);
|
||||||
});
|
});
|
||||||
return res;
|
return res;
|
||||||
}
|
}, allowClear: false,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ define('pgadmin.node.procedure', [
|
|||||||
]);
|
]);
|
||||||
},
|
},
|
||||||
canCreateProc: function(itemData, item) {
|
canCreateProc: function(itemData, item) {
|
||||||
var node_hierarchy = this.getTreeNodeHierarchy.apply(this, [item]);
|
var node_hierarchy = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
|
|
||||||
// Do not provide Create option in catalog
|
// Do not provide Create option in catalog
|
||||||
if ('catalog' in node_hierarchy)
|
if ('catalog' in node_hierarchy)
|
||||||
|
@ -43,7 +43,7 @@ define('pgadmin.node.trigger_function', [
|
|||||||
label: gettext('Trigger function'),
|
label: gettext('Trigger function'),
|
||||||
collection_type: 'coll-trigger_function',
|
collection_type: 'coll-trigger_function',
|
||||||
canEdit: function(itemData, item) {
|
canEdit: function(itemData, item) {
|
||||||
let node = pgBrowser.treeMenu.findNodeByDomElement(item);
|
let node = pgBrowser.tree.findNodeByDomElement(item);
|
||||||
|
|
||||||
if (!node || node.parentNode.getData()._type === 'trigger')
|
if (!node || node.parentNode.getData()._type === 'trigger')
|
||||||
return false;
|
return false;
|
||||||
|
@ -78,7 +78,7 @@ define('pgadmin.node.package', [
|
|||||||
if (data && data.check == false)
|
if (data && data.check == false)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
|
|
||||||
if (server && server.server_type === 'pg')
|
if (server && server.server_type === 'pg')
|
||||||
|
@ -409,7 +409,7 @@ define('pgadmin.node.schema', [
|
|||||||
});
|
});
|
||||||
|
|
||||||
pgBrowser.tableChildTreeNodeHierarchy = function(i) {
|
pgBrowser.tableChildTreeNodeHierarchy = function(i) {
|
||||||
return this.getTreeNodeHierarchy(i);
|
return pgBrowser.tree.getTreeNodeHierarchy(i);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
//
|
//
|
||||||
/////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import * as pgBrowser from 'pgbrowser/browser';
|
import pgAdmin from 'sources/pgadmin';
|
||||||
|
|
||||||
|
let pgBrowser = pgAdmin.Browser;
|
||||||
|
|
||||||
export function childCreateMenuEnabled(itemData, item, data) {
|
export function childCreateMenuEnabled(itemData, item, data) {
|
||||||
// If check is false then , we will allow create menu
|
// If check is false then , we will allow create menu
|
||||||
@ -15,7 +17,7 @@ export function childCreateMenuEnabled(itemData, item, data) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let node = pgBrowser.treeMenu.findNodeByDomElement(item);
|
let node = pgBrowser.tree.findNodeByDomElement(item);
|
||||||
|
|
||||||
if (node)
|
if (node)
|
||||||
return node.anyFamilyMember(
|
return node.anyFamilyMember(
|
||||||
@ -26,7 +28,7 @@ export function childCreateMenuEnabled(itemData, item, data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function isTreeItemOfChildOfSchema(itemData, item) {
|
export function isTreeItemOfChildOfSchema(itemData, item) {
|
||||||
let node = pgBrowser.treeMenu.findNodeByDomElement(item);
|
let node = pgBrowser.tree.findNodeByDomElement(item);
|
||||||
|
|
||||||
if (node)
|
if (node)
|
||||||
return isTreeNodeOfSchemaChild(node);
|
return isTreeNodeOfSchemaChild(node);
|
||||||
|
@ -152,7 +152,7 @@ define('pgadmin.node.synonym', [
|
|||||||
if (data && data.check == false)
|
if (data && data.check == false)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
|
|
||||||
if (server && server.server_type === 'pg')
|
if (server && server.server_type === 'pg')
|
||||||
|
@ -41,7 +41,7 @@ define('pgadmin.node.column', [
|
|||||||
sqlCreateHelp: 'sql-altertable.html',
|
sqlCreateHelp: 'sql-altertable.html',
|
||||||
dialogHelp: url_for('help.static', {'filename': 'column_dialog.html'}),
|
dialogHelp: url_for('help.static', {'filename': 'column_dialog.html'}),
|
||||||
canDrop: function(itemData, item){
|
canDrop: function(itemData, item){
|
||||||
let node = pgBrowser.treeMenu.findNodeByDomElement(item);
|
let node = pgBrowser.tree.findNodeByDomElement(item);
|
||||||
|
|
||||||
if (!node)
|
if (!node)
|
||||||
return false;
|
return false;
|
||||||
|
@ -108,7 +108,7 @@ define('pgadmin.node.compound_trigger', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -146,7 +146,7 @@ define('pgadmin.node.compound_trigger', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -206,7 +206,7 @@ define('pgadmin.node.compound_trigger', [
|
|||||||
if (data && data.check == false)
|
if (data && data.check == false)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
|
|
||||||
if (server && (server.server_type === 'pg' || server.version < 120000))
|
if (server && (server.server_type === 'pg' || server.version < 120000))
|
||||||
@ -221,7 +221,7 @@ define('pgadmin.node.compound_trigger', [
|
|||||||
},
|
},
|
||||||
// Check to whether trigger is disable ?
|
// Check to whether trigger is disable ?
|
||||||
canCreate_with_compound_trigger_enable: function(itemData, item, data) {
|
canCreate_with_compound_trigger_enable: function(itemData, item, data) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item);
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
if ('view' in treeData) {
|
if ('view' in treeData) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -231,7 +231,7 @@ define('pgadmin.node.compound_trigger', [
|
|||||||
},
|
},
|
||||||
// Check to whether trigger is enable ?
|
// Check to whether trigger is enable ?
|
||||||
canCreate_with_compound_trigger_disable: function(itemData, item, data) {
|
canCreate_with_compound_trigger_disable: function(itemData, item, data) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item);
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
if ('view' in treeData) {
|
if ('view' in treeData) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ define('pgadmin.node.check_constraint', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (d) {
|
if (d) {
|
||||||
var data = d;
|
var data = d;
|
||||||
|
@ -61,7 +61,7 @@ define('pgadmin.node.foreign_key', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (d) {
|
if (d) {
|
||||||
var data = d;
|
var data = d;
|
||||||
@ -99,7 +99,7 @@ define('pgadmin.node.foreign_key', [
|
|||||||
var t = pgBrowser.tree, i = item, d = itemData, parents = [],
|
var t = pgBrowser.tree, i = item, d = itemData, parents = [],
|
||||||
immediate_parent_table_found = false,
|
immediate_parent_table_found = false,
|
||||||
is_immediate_parent_table_partitioned = false,
|
is_immediate_parent_table_partitioned = false,
|
||||||
s_version = this.getTreeNodeHierarchy(i).server.version;
|
s_version = t.getTreeNodeHierarchy(i).server.version;
|
||||||
|
|
||||||
// To iterate over tree to check parent node
|
// To iterate over tree to check parent node
|
||||||
while (i) {
|
while (i) {
|
||||||
|
@ -58,7 +58,7 @@ define('pgadmin.node.primary_key', [
|
|||||||
var t = pgBrowser.tree, i = item, d = itemData, parents = [],
|
var t = pgBrowser.tree, i = item, d = itemData, parents = [],
|
||||||
immediate_parent_table_found = false,
|
immediate_parent_table_found = false,
|
||||||
is_immediate_parent_table_partitioned = false,
|
is_immediate_parent_table_partitioned = false,
|
||||||
s_version = this.getTreeNodeHierarchy(i).server.version;
|
s_version = t.getTreeNodeHierarchy(i).server.version;
|
||||||
|
|
||||||
// To iterate over tree to check parent node
|
// To iterate over tree to check parent node
|
||||||
while (i) {
|
while (i) {
|
||||||
@ -81,7 +81,7 @@ define('pgadmin.node.primary_key', [
|
|||||||
primary_key_found = false;
|
primary_key_found = false;
|
||||||
|
|
||||||
_.each(children, function(child){
|
_.each(children, function(child){
|
||||||
data = pgBrowser.tree.itemData($(child));
|
data = pgBrowser.tree.itemData(child);
|
||||||
if (!primary_key_found && data._type == 'primary_key') {
|
if (!primary_key_found && data._type == 'primary_key') {
|
||||||
primary_key_found = true;
|
primary_key_found = true;
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ define('pgadmin.node.unique_constraint', [
|
|||||||
var t = pgBrowser.tree, i = item, d = itemData, parents = [],
|
var t = pgBrowser.tree, i = item, d = itemData, parents = [],
|
||||||
immediate_parent_table_found = false,
|
immediate_parent_table_found = false,
|
||||||
is_immediate_parent_table_partitioned = false,
|
is_immediate_parent_table_partitioned = false,
|
||||||
s_version = this.getTreeNodeHierarchy(i).server.version;
|
s_version = pgBrowser.tree.getTreeNodeHierarchy(i).server.version;
|
||||||
|
|
||||||
// To iterate over tree to check parent node
|
// To iterate over tree to check parent node
|
||||||
while (i) {
|
while (i) {
|
||||||
|
@ -124,7 +124,7 @@ define('pgadmin.node.index', [
|
|||||||
var t = pgBrowser.tree, i = item, d = itemData, parents = [],
|
var t = pgBrowser.tree, i = item, d = itemData, parents = [],
|
||||||
immediate_parent_table_found = false,
|
immediate_parent_table_found = false,
|
||||||
is_immediate_parent_table_partitioned = false,
|
is_immediate_parent_table_partitioned = false,
|
||||||
s_version = this.getTreeNodeHierarchy(i).server.version;
|
s_version = t.getTreeNodeHierarchy(i).server.version;
|
||||||
// To iterate over tree to check parent node
|
// To iterate over tree to check parent node
|
||||||
while (i) {
|
while (i) {
|
||||||
// Do not allow creating index on partitioned tables.
|
// Do not allow creating index on partitioned tables.
|
||||||
|
@ -116,7 +116,7 @@ function(
|
|||||||
}
|
}
|
||||||
|
|
||||||
info = (_.isUndefined(item) || _.isNull(item)) ?
|
info = (_.isUndefined(item) || _.isNull(item)) ?
|
||||||
info || {} : this.getTreeNodeHierarchy(item);
|
info || {} : pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
|
|
||||||
return pgadminUtils.sprintf('table/%s/%s/%s/%s/%s/%s',
|
return pgadminUtils.sprintf('table/%s/%s/%s/%s/%s/%s',
|
||||||
encodeURIComponent(type), encodeURIComponent(info['server_group']._id),
|
encodeURIComponent(type), encodeURIComponent(info['server_group']._id),
|
||||||
@ -146,7 +146,7 @@ function(
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -188,7 +188,7 @@ function(
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -232,7 +232,7 @@ function(
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -276,7 +276,7 @@ function(
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -294,15 +294,14 @@ function(
|
|||||||
if (res.success == 1) {
|
if (res.success == 1) {
|
||||||
Alertify.success(res.info);
|
Alertify.success(res.info);
|
||||||
var n = t.next(i);
|
var n = t.next(i);
|
||||||
if (!n || !n.length) {
|
if (!n) {
|
||||||
n = t.prev(i);
|
n = t.prev(i);
|
||||||
if (!n || !n.length) {
|
if (!n) {
|
||||||
n = t.parent(i);
|
n = t.parent(i);
|
||||||
t.setInode(n, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
t.remove(i);
|
t.remove(i);
|
||||||
if (n.length) {
|
if (n) {
|
||||||
t.select(n);
|
t.select(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ define('pgadmin.node.row_security_policy', [
|
|||||||
}),
|
}),
|
||||||
canCreate: function(itemData, item) {
|
canCreate: function(itemData, item) {
|
||||||
|
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
|
|
||||||
// If node is under catalog then do not allow 'create' menu
|
// If node is under catalog then do not allow 'create' menu
|
||||||
|
@ -140,7 +140,7 @@ define('pgadmin.node.table', [
|
|||||||
/* Enable trigger(s) on table */
|
/* Enable trigger(s) on table */
|
||||||
enable_triggers_on_table: function(args) {
|
enable_triggers_on_table: function(args) {
|
||||||
tableFunctions.enableTriggers(
|
tableFunctions.enableTriggers(
|
||||||
pgBrowser.treeMenu,
|
pgBrowser.tree,
|
||||||
Alertify,
|
Alertify,
|
||||||
this.generate_url.bind(this),
|
this.generate_url.bind(this),
|
||||||
args
|
args
|
||||||
@ -149,7 +149,7 @@ define('pgadmin.node.table', [
|
|||||||
/* Disable trigger(s) on table */
|
/* Disable trigger(s) on table */
|
||||||
disable_triggers_on_table: function(args) {
|
disable_triggers_on_table: function(args) {
|
||||||
tableFunctions.disableTriggers(
|
tableFunctions.disableTriggers(
|
||||||
pgBrowser.treeMenu,
|
pgBrowser.tree,
|
||||||
Alertify,
|
Alertify,
|
||||||
this.generate_url.bind(this),
|
this.generate_url.bind(this),
|
||||||
args
|
args
|
||||||
@ -174,7 +174,7 @@ define('pgadmin.node.table', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -219,7 +219,7 @@ define('pgadmin.node.table', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -263,7 +263,7 @@ define('pgadmin.node.table', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ define('pgadmin.node.trigger', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -140,7 +140,7 @@ define('pgadmin.node.trigger', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -653,7 +653,7 @@ define('pgadmin.node.trigger', [
|
|||||||
canCreate: SchemaChildTreeNode.isTreeItemOfChildOfSchema,
|
canCreate: SchemaChildTreeNode.isTreeItemOfChildOfSchema,
|
||||||
// Check to whether trigger is disable ?
|
// Check to whether trigger is disable ?
|
||||||
canCreate_with_trigger_enable: function(itemData, item, data) {
|
canCreate_with_trigger_enable: function(itemData, item, data) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item);
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
if ('view' in treeData) {
|
if ('view' in treeData) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -663,7 +663,7 @@ define('pgadmin.node.trigger', [
|
|||||||
},
|
},
|
||||||
// Check to whether trigger is enable ?
|
// Check to whether trigger is enable ?
|
||||||
canCreate_with_trigger_disable: function(itemData, item, data) {
|
canCreate_with_trigger_disable: function(itemData, item, data) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item);
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
if ('view' in treeData) {
|
if ('view' in treeData) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -238,7 +238,7 @@ define('pgadmin.node.mview', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
d = i ? t.itemData(i) : undefined,
|
||||||
server_data = null;
|
server_data = null;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
@ -253,7 +253,7 @@ define('pgadmin.node.mview', [
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pgBrowser.tree.hasParent(j)) {
|
if (pgBrowser.tree.hasParent(j)) {
|
||||||
j = $(pgBrowser.tree.parent(j));
|
j = pgBrowser.tree.parent(j);
|
||||||
} else {
|
} else {
|
||||||
Alertify.alert(gettext('Please select server or child node from tree.'));
|
Alertify.alert(gettext('Please select server or child node from tree.'));
|
||||||
break;
|
break;
|
||||||
@ -316,9 +316,7 @@ define('pgadmin.node.mview', [
|
|||||||
is_version_supported: function(data, item) {
|
is_version_supported: function(data, item) {
|
||||||
var t = pgAdmin.Browser.tree,
|
var t = pgAdmin.Browser.tree,
|
||||||
i = item || t.selected(),
|
i = item || t.selected(),
|
||||||
d = data || (i && i.length == 1 ? t.itemData(i): undefined),
|
info = t && t.getTreeNodeHierarchy(i),
|
||||||
node = this || (d && pgAdmin.Browser.Nodes[d._type]),
|
|
||||||
info = node && node.getTreeNodeHierarchy.apply(node, [i]),
|
|
||||||
version = _.isUndefined(info) ? 0 : info.server.version;
|
version = _.isUndefined(info) ? 0 : info.server.version;
|
||||||
|
|
||||||
// disable refresh concurrently if server version is 9.3
|
// disable refresh concurrently if server version is 9.3
|
||||||
|
@ -106,13 +106,13 @@ define('pgadmin.node.database', [
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
can_create_database: function(node, item) {
|
can_create_database: function(node, item) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
|
|
||||||
return server.connected && server.user.can_create_db;
|
return server.connected && server.user.can_create_db;
|
||||||
},
|
},
|
||||||
canCreate: function(itemData, item) {
|
canCreate: function(itemData, item) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
|
|
||||||
// If server is less than 10 then do not allow 'create' menu
|
// If server is less than 10 then do not allow 'create' menu
|
||||||
@ -201,7 +201,7 @@ define('pgadmin.node.database', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (d && d.label != 'template0') {
|
if (d && d.label != 'template0') {
|
||||||
connect_to_database(obj, d, t, i, true);
|
connect_to_database(obj, d, t, i, true);
|
||||||
@ -214,7 +214,7 @@ define('pgadmin.node.database', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (d) {
|
if (d) {
|
||||||
Alertify.confirm(
|
Alertify.confirm(
|
||||||
@ -238,7 +238,6 @@ define('pgadmin.node.database', [
|
|||||||
data.icon = 'icon-database-not-connected';
|
data.icon = 'icon-database-not-connected';
|
||||||
t.addIcon(i, {icon: data.icon});
|
t.addIcon(i, {icon: data.icon});
|
||||||
t.unload(i);
|
t.unload(i);
|
||||||
t.setInode(i);
|
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
t.select(prv_i);
|
t.select(prv_i);
|
||||||
}, 10);
|
}, 10);
|
||||||
@ -272,7 +271,7 @@ define('pgadmin.node.database', [
|
|||||||
var input = args || {},
|
var input = args || {},
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
pgBrowser.erd.showErdTool(d, i, true);
|
pgBrowser.erd.showErdTool(d, i, true);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -158,7 +158,7 @@ define('pgadmin.node.subscription', [
|
|||||||
return pgBrowser.DataModel.prototype.sessChanged.apply(this);
|
return pgBrowser.DataModel.prototype.sessChanged.apply(this);
|
||||||
},
|
},
|
||||||
canCreate: function(itemData, item) {
|
canCreate: function(itemData, item) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
|
|
||||||
// If server is less than 10 then do not allow 'create' menu
|
// If server is less than 10 then do not allow 'create' menu
|
||||||
|
@ -114,7 +114,7 @@ define('pgadmin.node.pga_job', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (d) {
|
if (d) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
@ -56,7 +56,7 @@ define('pgadmin.node.resource_group', [
|
|||||||
* Resource Group only supported in PPAS 9.4 and above.
|
* Resource Group only supported in PPAS 9.4 and above.
|
||||||
*/
|
*/
|
||||||
enable: function(node, item) {
|
enable: function(node, item) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
return server.connected && node.server_type === 'ppas' &&
|
return server.connected && node.server_type === 'ppas' &&
|
||||||
node.version >= 90400;
|
node.version >= 90400;
|
||||||
|
@ -46,7 +46,7 @@ define('pgadmin.node.role', [
|
|||||||
hasSQL: true,
|
hasSQL: true,
|
||||||
width: '550px',
|
width: '550px',
|
||||||
canDrop: function(node, item) {
|
canDrop: function(node, item) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
/*
|
/*
|
||||||
To Drop a role:
|
To Drop a role:
|
||||||
@ -114,13 +114,13 @@ define('pgadmin.node.role', [
|
|||||||
}]);
|
}]);
|
||||||
},
|
},
|
||||||
can_create_role: function(node, item) {
|
can_create_role: function(node, item) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
|
|
||||||
return server.connected && server.user.can_create_role;
|
return server.connected && server.user.can_create_role;
|
||||||
},
|
},
|
||||||
can_reassign_role: function(node, item) {
|
can_reassign_role: function(node, item) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
|
|
||||||
return server.connected && node.can_login;
|
return server.connected && node.can_login;
|
||||||
@ -444,7 +444,7 @@ define('pgadmin.node.role', [
|
|||||||
if (!_d)
|
if (!_d)
|
||||||
return;
|
return;
|
||||||
// Create treeInfo
|
// Create treeInfo
|
||||||
var treeInfo = node.getTreeNodeHierarchy.apply(node, [_i]);
|
var treeInfo = pgBrowser.tree.getTreeNodeHierarchy(_i);
|
||||||
// Instance of backbone model
|
// Instance of backbone model
|
||||||
var newModel = new RoleReassignObjectModel({}, {node_info: treeInfo}),
|
var newModel = new RoleReassignObjectModel({}, {node_info: treeInfo}),
|
||||||
fields = Backform.generateViewSchema(
|
fields = Backform.generateViewSchema(
|
||||||
|
@ -227,7 +227,7 @@ define('pgadmin.node.server', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (d) {
|
if (d) {
|
||||||
connect_to_server(obj, d, t, i, false);
|
connect_to_server(obj, d, t, i, false);
|
||||||
@ -240,7 +240,7 @@ define('pgadmin.node.server', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = 'item' in input ? input.item : t.selected(),
|
i = 'item' in input ? input.item : t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (d) {
|
if (d) {
|
||||||
notify = notify || _.isUndefined(notify) || _.isNull(notify);
|
notify = notify || _.isUndefined(notify) || _.isNull(notify);
|
||||||
@ -263,6 +263,7 @@ define('pgadmin.node.server', [
|
|||||||
}
|
}
|
||||||
t.addIcon(i, {icon: d.icon});
|
t.addIcon(i, {icon: d.icon});
|
||||||
obj.callbacks.refresh.apply(obj, [null, i]);
|
obj.callbacks.refresh.apply(obj, [null, i]);
|
||||||
|
t.close(i);
|
||||||
if (pgBrowser.serverInfo && d._id in pgBrowser.serverInfo) {
|
if (pgBrowser.serverInfo && d._id in pgBrowser.serverInfo) {
|
||||||
delete pgBrowser.serverInfo[d._id];
|
delete pgBrowser.serverInfo[d._id];
|
||||||
}
|
}
|
||||||
@ -332,7 +333,7 @@ define('pgadmin.node.server', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (d) {
|
if (d) {
|
||||||
Alertify.confirm(
|
Alertify.confirm(
|
||||||
@ -368,7 +369,7 @@ define('pgadmin.node.server', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -409,7 +410,7 @@ define('pgadmin.node.server', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
d = i ? t.itemData(i) : undefined,
|
||||||
url = obj.generate_url(i, 'change_password', d, true),
|
url = obj.generate_url(i, 'change_password', d, true),
|
||||||
is_pgpass_file_used = false,
|
is_pgpass_file_used = false,
|
||||||
check_pgpass_url = obj.generate_url(i, 'check_pgpass', d, true);
|
check_pgpass_url = obj.generate_url(i, 'check_pgpass', d, true);
|
||||||
@ -591,7 +592,7 @@ define('pgadmin.node.server', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -626,7 +627,7 @@ define('pgadmin.node.server', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return false;
|
return false;
|
||||||
@ -661,7 +662,7 @@ define('pgadmin.node.server', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (d) {
|
if (d) {
|
||||||
Alertify.confirm(
|
Alertify.confirm(
|
||||||
@ -698,7 +699,7 @@ define('pgadmin.node.server', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (d) {
|
if (d) {
|
||||||
Alertify.confirm(
|
Alertify.confirm(
|
||||||
@ -733,7 +734,7 @@ define('pgadmin.node.server', [
|
|||||||
var input = args || {},
|
var input = args || {},
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
pgBrowser.psql.psql_tool(d, i, true);
|
pgBrowser.psql.psql_tool(d, i, true);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -848,7 +849,7 @@ define('pgadmin.node.server', [
|
|||||||
// It should be attempt to reconnect.
|
// It should be attempt to reconnect.
|
||||||
// Let's not change the status of the tree node now.
|
// Let's not change the status of the tree node now.
|
||||||
if (!_wasConnected) {
|
if (!_wasConnected) {
|
||||||
tree.setInode(_item);
|
tree.close(_item);
|
||||||
if (_data.shared && pgAdmin.server_mode == 'True'){
|
if (_data.shared && pgAdmin.server_mode == 'True'){
|
||||||
tree.addIcon(_item, {icon: 'icon-shared-server-not-connected'});
|
tree.addIcon(_item, {icon: 'icon-shared-server-not-connected'});
|
||||||
}else{
|
}else{
|
||||||
@ -922,7 +923,6 @@ define('pgadmin.node.server', [
|
|||||||
// We're not reconnecting
|
// We're not reconnecting
|
||||||
if (!_wasConnected) {
|
if (!_wasConnected) {
|
||||||
_tree.setInode(_item);
|
_tree.setInode(_item);
|
||||||
_tree.deselect(_item);
|
|
||||||
|
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
_tree.select(_item);
|
_tree.select(_item);
|
||||||
|
@ -84,13 +84,13 @@ define('pgadmin.node.tablespace', [
|
|||||||
]);
|
]);
|
||||||
},
|
},
|
||||||
can_create_tablespace: function(node, item) {
|
can_create_tablespace: function(node, item) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
|
|
||||||
return server.connected && server.user.is_superuser;
|
return server.connected && server.user.is_superuser;
|
||||||
},
|
},
|
||||||
can_move_objects: function(node, item) {
|
can_move_objects: function(node, item) {
|
||||||
var treeData = this.getTreeNodeHierarchy(item),
|
var treeData = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
server = treeData['server'];
|
server = treeData['server'];
|
||||||
// Only supported PG9.4 and above version
|
// Only supported PG9.4 and above version
|
||||||
return server.connected &&
|
return server.connected &&
|
||||||
@ -104,7 +104,7 @@ define('pgadmin.node.tablespace', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
d = i ? t.itemData(i) : undefined,
|
||||||
url = obj.generate_url(i, 'move_objects', d, true),
|
url = obj.generate_url(i, 'move_objects', d, true),
|
||||||
msql_url = obj.generate_url(i, 'move_objects_sql', d, true);
|
msql_url = obj.generate_url(i, 'move_objects_sql', d, true);
|
||||||
|
|
||||||
@ -243,7 +243,7 @@ define('pgadmin.node.tablespace', [
|
|||||||
if (!_d)
|
if (!_d)
|
||||||
return;
|
return;
|
||||||
// Create treeInfo
|
// Create treeInfo
|
||||||
var treeInfo = node.getTreeNodeHierarchy.apply(node, [_i]);
|
var treeInfo = pgAdmin.tree.getTreeNodeHierarchy.apply(node, [_i]);
|
||||||
// Instance of backbone model
|
// Instance of backbone model
|
||||||
var newModel = new objModel({}, {node_info: treeInfo, selected_ts: _d.label}),
|
var newModel = new objModel({}, {node_info: treeInfo, selected_ts: _d.label}),
|
||||||
fields = Backform.generateViewSchema(
|
fields = Backform.generateViewSchema(
|
||||||
|
@ -8,11 +8,11 @@
|
|||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
define('pgadmin.browser', [
|
define('pgadmin.browser', [
|
||||||
'sources/tree/tree',
|
|
||||||
'sources/gettext', 'sources/url_for', 'require', 'jquery', 'underscore',
|
'sources/gettext', 'sources/url_for', 'require', 'jquery', 'underscore',
|
||||||
'bootstrap', 'sources/pgadmin', 'pgadmin.alertifyjs', 'bundled_codemirror',
|
'bootstrap', 'sources/pgadmin', 'pgadmin.alertifyjs', 'bundled_codemirror',
|
||||||
'sources/check_node_visibility', './toolbar', 'pgadmin.help',
|
'sources/check_node_visibility', './toolbar', 'pgadmin.help',
|
||||||
'sources/csrf', 'sources/utils', 'sources/window', 'pgadmin.authenticate.kerberos',
|
'sources/csrf', 'sources/utils', 'sources/window', 'pgadmin.authenticate.kerberos',
|
||||||
|
'sources/tree/tree_init',
|
||||||
'pgadmin.browser.utils', 'wcdocker', 'jquery.contextmenu', 'jquery.aciplugin',
|
'pgadmin.browser.utils', 'wcdocker', 'jquery.contextmenu', 'jquery.aciplugin',
|
||||||
'jquery.acitree',
|
'jquery.acitree',
|
||||||
'pgadmin.browser.preferences', 'pgadmin.browser.messages',
|
'pgadmin.browser.preferences', 'pgadmin.browser.messages',
|
||||||
@ -23,11 +23,10 @@ define('pgadmin.browser', [
|
|||||||
'pgadmin.browser.keyboard', 'sources/tree/pgadmin_tree_save_state','jquery.acisortable',
|
'pgadmin.browser.keyboard', 'sources/tree/pgadmin_tree_save_state','jquery.acisortable',
|
||||||
'jquery.acifragment',
|
'jquery.acifragment',
|
||||||
], function(
|
], function(
|
||||||
tree,
|
|
||||||
gettext, url_for, require, $, _,
|
gettext, url_for, require, $, _,
|
||||||
Bootstrap, pgAdmin, Alertify, codemirror,
|
Bootstrap, pgAdmin, Alertify, codemirror,
|
||||||
checkNodeVisibility, toolBar, help, csrfToken, pgadminUtils, pgWindow,
|
checkNodeVisibility, toolBar, help, csrfToken, pgadminUtils, pgWindow,
|
||||||
Kerberos
|
Kerberos, InitTree,
|
||||||
) {
|
) {
|
||||||
window.jQuery = window.$ = $;
|
window.jQuery = window.$ = $;
|
||||||
// Some scripts do export their object in the window only.
|
// Some scripts do export their object in the window only.
|
||||||
@ -48,7 +47,7 @@ define('pgadmin.browser', [
|
|||||||
if (this.isVisible()) {
|
if (this.isVisible()) {
|
||||||
var obj = pgAdmin.Browser,
|
var obj = pgAdmin.Browser,
|
||||||
i = obj.tree ? obj.tree.selected() : undefined,
|
i = obj.tree ? obj.tree.selected() : undefined,
|
||||||
d = i && i.length == 1 ? obj.tree.itemData(i) : undefined;
|
d = i ? obj.tree.itemData(i) : undefined;
|
||||||
|
|
||||||
if (d && obj.Nodes[d._type].callbacks['selected'] &&
|
if (d && obj.Nodes[d._type].callbacks['selected'] &&
|
||||||
_.isFunction(obj.Nodes[d._type].callbacks['selected'])) {
|
_.isFunction(obj.Nodes[d._type].callbacks['selected'])) {
|
||||||
@ -58,98 +57,52 @@ define('pgadmin.browser', [
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var processTreeData = function(payload) {
|
|
||||||
var data = JSON.parse(payload).data;
|
|
||||||
if (data.length && data[0]._type !== 'column' &&
|
|
||||||
data[0]._type !== 'catalog_object_column') {
|
|
||||||
data.sort(function(a, b) {
|
|
||||||
return pgAdmin.natural_sort(a.label, b.label);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
_.each(data, function(d){
|
|
||||||
d._label = d.label;
|
|
||||||
d.label = _.escape(d.label);
|
|
||||||
});
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
|
|
||||||
var initializeBrowserTree = pgAdmin.Browser.initializeBrowserTree =
|
var initializeBrowserTree = pgAdmin.Browser.initializeBrowserTree =
|
||||||
function(b) {
|
function(b) {
|
||||||
$('#tree').aciTree({
|
InitTree.initBrowserTree(b).then(() => {
|
||||||
ajax: {
|
b.tree.registerDraggableType({
|
||||||
url: url_for('browser.nodes'),
|
'collation domain domain_constraints fts_configuration fts_dictionary fts_parser fts_template synonym table partition type sequence package view mview foreign_table edbvar' : (data, item)=>{
|
||||||
converters: {
|
return pgadminUtils.fully_qualify(b, data, item);
|
||||||
'text json': processTreeData,
|
|
||||||
},
|
},
|
||||||
},
|
'schema column database cast event_trigger extension language foreign_data_wrapper foreign_server user_mapping compound_trigger index index_constraint primary_key unique_constraint check_constraint exclusion_constraint foreign_key rule' : (data)=>{
|
||||||
ajaxHook: function(item, settings) {
|
return pgadminUtils.quote_ident(data._label);
|
||||||
if (item != null) {
|
},
|
||||||
var d = this.itemData(item);
|
'trigger trigger_function' : (data)=>{
|
||||||
var n = b.Nodes[d._type];
|
return data._label;
|
||||||
if (n)
|
},
|
||||||
settings.url = n.generate_url(item, 'children', d, true);
|
'edbfunc function edbproc procedure' : (data, item)=>{
|
||||||
}
|
let newData = {...data},
|
||||||
},
|
parsedFunc = null,
|
||||||
loaderDelay: 100,
|
dropVal = '',
|
||||||
show: {
|
curPos = {from: 0, to: 0};
|
||||||
duration: 75,
|
|
||||||
},
|
|
||||||
hide: {
|
|
||||||
duration: 75,
|
|
||||||
},
|
|
||||||
view: {
|
|
||||||
duration: 75,
|
|
||||||
},
|
|
||||||
animateRoot: true,
|
|
||||||
unanimated: false,
|
|
||||||
fullRow: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
b.tree = $('#tree').aciTree('api');
|
parsedFunc = pgadminUtils.parseFuncParams(newData._label);
|
||||||
b.treeMenu.register($('#tree'));
|
newData._label = parsedFunc.func_name;
|
||||||
|
dropVal = pgadminUtils.fully_qualify(b, newData, item);
|
||||||
|
|
||||||
b.treeMenu.registerDraggableType({
|
if(parsedFunc.params.length > 0) {
|
||||||
'collation domain domain_constraints fts_configuration fts_dictionary fts_parser fts_template synonym table partition type sequence package view mview foreign_table edbvar' : (data, item)=>{
|
dropVal = dropVal + '(';
|
||||||
return pgadminUtils.fully_qualify(b, data, item);
|
curPos.from = dropVal.length;
|
||||||
},
|
dropVal = dropVal + parsedFunc.params[0][0];
|
||||||
'schema column database cast event_trigger extension language foreign_data_wrapper foreign_server user_mapping compound_trigger index index_constraint primary_key unique_constraint check_constraint exclusion_constraint foreign_key rule' : (data)=>{
|
curPos.to = dropVal.length;
|
||||||
return pgadminUtils.quote_ident(data._label);
|
|
||||||
},
|
|
||||||
'trigger trigger_function' : (data)=>{
|
|
||||||
return data._label;
|
|
||||||
},
|
|
||||||
'edbfunc function edbproc procedure' : (data, item)=>{
|
|
||||||
let newData = {...data},
|
|
||||||
parsedFunc = null,
|
|
||||||
dropVal = '',
|
|
||||||
curPos = {from: 0, to: 0};
|
|
||||||
|
|
||||||
parsedFunc = pgadminUtils.parseFuncParams(newData._label);
|
for(let i=1; i<parsedFunc.params.length; i++) {
|
||||||
newData._label = parsedFunc.func_name;
|
dropVal = dropVal + ', ' + parsedFunc.params[i][0];
|
||||||
dropVal = pgadminUtils.fully_qualify(b, newData, item);
|
}
|
||||||
|
|
||||||
if(parsedFunc.params.length > 0) {
|
dropVal = dropVal + ')';
|
||||||
dropVal = dropVal + '(';
|
} else {
|
||||||
curPos.from = dropVal.length;
|
dropVal = dropVal + '()';
|
||||||
dropVal = dropVal + parsedFunc.params[0][0];
|
curPos.from = curPos.to = dropVal.length + 1;
|
||||||
curPos.to = dropVal.length;
|
|
||||||
|
|
||||||
for(let i=1; i<parsedFunc.params.length; i++) {
|
|
||||||
dropVal = dropVal + ', ' + parsedFunc.params[i][0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dropVal = dropVal + ')';
|
return {
|
||||||
} else {
|
text: dropVal,
|
||||||
dropVal = dropVal + '()';
|
cur: curPos,
|
||||||
curPos.from = curPos.to = dropVal.length + 1;
|
};
|
||||||
}
|
},
|
||||||
|
});
|
||||||
return {
|
}, () => {console.warn('Tree Load Error');});
|
||||||
text: dropVal,
|
|
||||||
cur: curPos,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Extend the browser class attributes
|
// Extend the browser class attributes
|
||||||
@ -164,7 +117,6 @@ define('pgadmin.browser', [
|
|||||||
editor:null,
|
editor:null,
|
||||||
// Left hand browser tree
|
// Left hand browser tree
|
||||||
tree:null,
|
tree:null,
|
||||||
treeMenu: new tree.Tree(),
|
|
||||||
// list of script to be loaded, when a certain type of node is loaded
|
// list of script to be loaded, when a certain type of node is loaded
|
||||||
// It will be used to register extensions, tools, child node scripts,
|
// It will be used to register extensions, tools, child node scripts,
|
||||||
// etc.
|
// etc.
|
||||||
@ -232,8 +184,9 @@ define('pgadmin.browser', [
|
|||||||
icon: '',
|
icon: '',
|
||||||
limit: 1,
|
limit: 1,
|
||||||
content: '<div id="tree" class="aciTree"></div>',
|
content: '<div id="tree" class="aciTree"></div>',
|
||||||
onCreate: function(panel) {
|
onCreate: function(panel, $container) {
|
||||||
toolBar.initializeToolbar(panel, wcDocker);
|
toolBar.initializeToolbar(panel, wcDocker);
|
||||||
|
$container.addClass('pg-no-overflow');
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
// Properties of the object node
|
// Properties of the object node
|
||||||
@ -387,7 +340,7 @@ define('pgadmin.browser', [
|
|||||||
// Drop down menu for objects
|
// Drop down menu for objects
|
||||||
$obj_mnu = navbar.find('li#mnu_obj .dropdown-menu').first(),
|
$obj_mnu = navbar.find('li#mnu_obj .dropdown-menu').first(),
|
||||||
// data for current selected object
|
// data for current selected object
|
||||||
d = obj.tree.itemData(item),
|
d = item ? obj.tree.itemData(item) : undefined,
|
||||||
update_menuitem = function(m) {
|
update_menuitem = function(m) {
|
||||||
if (m instanceof pgAdmin.Browser.MenuItem) {
|
if (m instanceof pgAdmin.Browser.MenuItem) {
|
||||||
m.update(d, item);
|
m.update(d, item);
|
||||||
@ -473,6 +426,8 @@ define('pgadmin.browser', [
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initializeBrowserTree(obj);
|
||||||
|
|
||||||
// Syntax highlight the SQL Pane
|
// Syntax highlight the SQL Pane
|
||||||
obj.editor = CodeMirror.fromTextArea(
|
obj.editor = CodeMirror.fromTextArea(
|
||||||
document.getElementById('sql-textarea'), {
|
document.getElementById('sql-textarea'), {
|
||||||
@ -503,12 +458,9 @@ define('pgadmin.browser', [
|
|||||||
obj.editor.refresh();
|
obj.editor.refresh();
|
||||||
}, 10);
|
}, 10);
|
||||||
|
|
||||||
// Initialise the treeview
|
|
||||||
initializeBrowserTree(obj);
|
|
||||||
|
|
||||||
// Build the treeview context menu
|
// Build the treeview context menu
|
||||||
$('#tree').contextMenu({
|
$('#tree').contextMenu({
|
||||||
selector: '.aciTreeLine',
|
selector: '.file-entry',
|
||||||
autoHide: false,
|
autoHide: false,
|
||||||
build: function(element) {
|
build: function(element) {
|
||||||
var item = obj.tree.itemFrom(element),
|
var item = obj.tree.itemFrom(element),
|
||||||
@ -534,47 +486,6 @@ define('pgadmin.browser', [
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Treeview event handler
|
|
||||||
$('#tree').on('acitree', function(event, api, item, eventName, options) {
|
|
||||||
var d = item ? obj.tree.itemData(item) : null;
|
|
||||||
var node;
|
|
||||||
|
|
||||||
if (d && obj.Nodes[d._type]) {
|
|
||||||
node = obj.Nodes[d._type];
|
|
||||||
|
|
||||||
/* If the node specific callback returns false, we will also return
|
|
||||||
* false for further processing.
|
|
||||||
*/
|
|
||||||
if (_.isObject(node.callbacks) &&
|
|
||||||
eventName in node.callbacks &&
|
|
||||||
typeof node.callbacks[eventName] == 'function' &&
|
|
||||||
!node.callbacks[eventName].apply(
|
|
||||||
node, [item, d, obj, options, eventName])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
/* Raise tree events for the nodes */
|
|
||||||
try {
|
|
||||||
node.trigger(
|
|
||||||
'browser-node.' + eventName, node, item, d
|
|
||||||
);
|
|
||||||
} catch (e) {
|
|
||||||
console.warn(e.stack || e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
obj.Events.trigger(
|
|
||||||
'pgadmin-browser:tree', eventName, item, d
|
|
||||||
);
|
|
||||||
obj.Events.trigger(
|
|
||||||
'pgadmin-browser:tree:' + eventName, item, d, node
|
|
||||||
);
|
|
||||||
} catch (e) {
|
|
||||||
console.warn(e.stack || e);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Register scripts and add menus
|
// Register scripts and add menus
|
||||||
pgBrowser.utils.registerScripts(this);
|
pgBrowser.utils.registerScripts(this);
|
||||||
pgBrowser.utils.addMenus(obj);
|
pgBrowser.utils.addMenus(obj);
|
||||||
@ -597,7 +508,7 @@ define('pgadmin.browser', [
|
|||||||
obj.check_corrupted_db_file();
|
obj.check_corrupted_db_file();
|
||||||
obj.Events.on('pgadmin:browser:tree:add', obj.onAddTreeNode, obj);
|
obj.Events.on('pgadmin:browser:tree:add', obj.onAddTreeNode, obj);
|
||||||
obj.Events.on('pgadmin:browser:tree:update', obj.onUpdateTreeNode, obj);
|
obj.Events.on('pgadmin:browser:tree:update', obj.onUpdateTreeNode, obj);
|
||||||
obj.Events.on('pgadmin:browser:tree:refresh', obj.onRefreshTreeNode, obj);
|
obj.Events.on('pgadmin:browser:tree:refresh', obj.onRefreshTreeNodeReact, obj);
|
||||||
obj.Events.on('pgadmin-browser:tree:loadfail', obj.onLoadFailNode, obj);
|
obj.Events.on('pgadmin-browser:tree:loadfail', obj.onLoadFailNode, obj);
|
||||||
|
|
||||||
obj.bind_beforeunload();
|
obj.bind_beforeunload();
|
||||||
@ -937,7 +848,7 @@ define('pgadmin.browser', [
|
|||||||
showHelp: function(type, url, node, item) {
|
showHelp: function(type, url, node, item) {
|
||||||
if (type == 'object_help') {
|
if (type == 'object_help') {
|
||||||
// Construct the URL
|
// Construct the URL
|
||||||
var server = node.getTreeNodeHierarchy(item).server;
|
var server = pgBrowser.tree.getTreeNodeHierarchy(item).server;
|
||||||
var baseUrl = pgBrowser.utils.pg_help_path;
|
var baseUrl = pgBrowser.utils.pg_help_path;
|
||||||
if (server.server_type == 'ppas') {
|
if (server.server_type == 'ppas') {
|
||||||
baseUrl = pgBrowser.utils.edbas_help_path;
|
baseUrl = pgBrowser.utils.edbas_help_path;
|
||||||
@ -962,7 +873,7 @@ define('pgadmin.browser', [
|
|||||||
var items = _o.t.children(_i),
|
var items = _o.t.children(_i),
|
||||||
i, d, n, idx = 0, size = items.length;
|
i, d, n, idx = 0, size = items.length;
|
||||||
for (; idx < size; idx++) {
|
for (; idx < size; idx++) {
|
||||||
i = items.eq(idx);
|
i = items[idx];
|
||||||
d = _o.t.itemData(i);
|
d = _o.t.itemData(i);
|
||||||
if (d._type === _d._type) {
|
if (d._type === _d._type) {
|
||||||
if (!_o.hasId || d._id == _d._id) {
|
if (!_o.hasId || d._id == _d._id) {
|
||||||
@ -998,19 +909,17 @@ define('pgadmin.browser', [
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (!loaded && _o.load) {
|
if (!loaded && _o.load) {
|
||||||
_o.t.open(_i, {
|
_o.t.open(_i).then(
|
||||||
success: onLoad,
|
() => {
|
||||||
unanimated: true,
|
onLoad();
|
||||||
fail: function() {
|
},
|
||||||
|
() => {
|
||||||
var fail = _o && _o.o && _o.o.fail;
|
var fail = _o && _o.o && _o.o.fail;
|
||||||
|
if (fail && typeof(fail) == 'function') {
|
||||||
if (
|
|
||||||
fail && typeof(fail) == 'function'
|
|
||||||
) {
|
|
||||||
fail.apply(_o.t, []);
|
fail.apply(_o.t, []);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
});
|
);
|
||||||
} else if (loaded) {
|
} else if (loaded) {
|
||||||
onLoad();
|
onLoad();
|
||||||
} else {
|
} else {
|
||||||
@ -1089,7 +998,7 @@ define('pgadmin.browser', [
|
|||||||
s = 0, e = items.length - 1, i,
|
s = 0, e = items.length - 1, i,
|
||||||
linearSearch = function() {
|
linearSearch = function() {
|
||||||
while (e >= s) {
|
while (e >= s) {
|
||||||
i = items.eq(s);
|
i = items[s];
|
||||||
var d = __ctx.t.itemData(i);
|
var d = __ctx.t.itemData(i);
|
||||||
if (d._type === 'column') {
|
if (d._type === 'column') {
|
||||||
if (pgAdmin.numeric_comparator(d._id, _data._id) == 1)
|
if (pgAdmin.numeric_comparator(d._id, _data._id) == 1)
|
||||||
@ -1102,7 +1011,7 @@ define('pgadmin.browser', [
|
|||||||
}
|
}
|
||||||
//when the current element is greater than the end element
|
//when the current element is greater than the end element
|
||||||
if (e != items.length - 1) {
|
if (e != items.length - 1) {
|
||||||
i = items.eq(e+1);
|
i = items[e+1];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
i = null;
|
i = null;
|
||||||
@ -1116,7 +1025,7 @@ define('pgadmin.browser', [
|
|||||||
//
|
//
|
||||||
// We will try until it's half.
|
// We will try until it's half.
|
||||||
while (e - s > 22) {
|
while (e - s > 22) {
|
||||||
i = items.eq(s);
|
i = items[s];
|
||||||
d = __ctx.t.itemData(i);
|
d = __ctx.t.itemData(i);
|
||||||
if (d._type === 'column') {
|
if (d._type === 'column') {
|
||||||
if (pgAdmin.numeric_comparator(d._id, _data._id) != -1)
|
if (pgAdmin.numeric_comparator(d._id, _data._id) != -1)
|
||||||
@ -1125,7 +1034,7 @@ define('pgadmin.browser', [
|
|||||||
if (pgAdmin.natural_sort(d._label, _data._label) != -1)
|
if (pgAdmin.natural_sort(d._label, _data._label) != -1)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
i = items.eq(e);
|
i = items[e];
|
||||||
d = __ctx.t.itemData(i);
|
d = __ctx.t.itemData(i);
|
||||||
let result;
|
let result;
|
||||||
if (d._type === 'column') {
|
if (d._type === 'column') {
|
||||||
@ -1135,14 +1044,14 @@ define('pgadmin.browser', [
|
|||||||
}
|
}
|
||||||
if (result !=1) {
|
if (result !=1) {
|
||||||
if (e != items.length - 1) {
|
if (e != items.length - 1) {
|
||||||
i = items.eq(e+1);
|
i = items[e+1];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
i = null;
|
i = null;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
m = s + Math.round((e - s) / 2);
|
m = s + Math.round((e - s) / 2);
|
||||||
i = items.eq(m);
|
i = items[m];
|
||||||
d = __ctx.t.itemData(i);
|
d = __ctx.t.itemData(i);
|
||||||
if(d._type === 'column'){
|
if(d._type === 'column'){
|
||||||
result = pgAdmin.numeric_comparator(d._id, _data._id);
|
result = pgAdmin.numeric_comparator(d._id, _data._id);
|
||||||
@ -1190,10 +1099,8 @@ define('pgadmin.browser', [
|
|||||||
is_parent_loaded_before = ___ctx.t.wasLoad(___ctx.i),
|
is_parent_loaded_before = ___ctx.t.wasLoad(___ctx.i),
|
||||||
_parent_data = ___ctx.t.itemData(___ctx.i);
|
_parent_data = ___ctx.t.itemData(___ctx.i);
|
||||||
|
|
||||||
___ctx.t.append(___ctx.i, {
|
___ctx.t.append(___ctx.i, _data).then(
|
||||||
itemData: _data,
|
(_i) => {
|
||||||
success: function(item, options) {
|
|
||||||
var _i = $(options.items[0]);
|
|
||||||
// Open the item path only if its parent is loaded
|
// Open the item path only if its parent is loaded
|
||||||
// or parent type is same as nodes
|
// or parent type is same as nodes
|
||||||
if(
|
if(
|
||||||
@ -1202,18 +1109,17 @@ define('pgadmin.browser', [
|
|||||||
_data._type
|
_data._type
|
||||||
) > -1
|
) > -1
|
||||||
) {
|
) {
|
||||||
___ctx.t.openPath(_i);
|
___ctx.t.open(___ctx.i);
|
||||||
___ctx.t.select(_i);
|
___ctx.t.select(_i);
|
||||||
} else {
|
} else {
|
||||||
if (_parent_data) {
|
if (_parent_data) {
|
||||||
// Unload the parent node so that we'll get
|
// Unload the parent node so that we'll get
|
||||||
// latest data when we try to expand it
|
// latest data when we try to expand it
|
||||||
___ctx.t.unload(___ctx.i, {
|
___ctx.t.unload(___ctx.i).then(
|
||||||
success: function (_item) {
|
() => {
|
||||||
// Lets try to load it now
|
___ctx.t.open(___ctx.i);
|
||||||
___ctx.t.open(_item);
|
}
|
||||||
},
|
);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
@ -1223,7 +1129,7 @@ define('pgadmin.browser', [
|
|||||||
___ctx.o.success.apply(___ctx.t, [_i, _data]);
|
___ctx.o.success.apply(___ctx.t, [_i, _data]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
fail: function() {
|
() => {
|
||||||
console.warn('Failed to append...', arguments);
|
console.warn('Failed to append...', arguments);
|
||||||
if (
|
if (
|
||||||
___ctx.o && ___ctx.o.fail &&
|
___ctx.o && ___ctx.o.fail &&
|
||||||
@ -1231,12 +1137,16 @@ define('pgadmin.browser', [
|
|||||||
) {
|
) {
|
||||||
___ctx.o.fail.apply(___ctx.t, [___ctx.i, _data]);
|
___ctx.o.fail.apply(___ctx.t, [___ctx.i, _data]);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
});
|
);
|
||||||
}.bind(__ctx);
|
}.bind(__ctx);
|
||||||
|
|
||||||
if (__ctx.i && !__ctx.t.isInode(__ctx.i)) {
|
if (__ctx.i && !__ctx.t.isInode(__ctx.i)) {
|
||||||
__ctx.t.setInode(__ctx.i, {success: _append});
|
__ctx.t.setInode(__ctx.i).then(
|
||||||
|
() => {
|
||||||
|
_append();
|
||||||
|
}
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
// Handle case for node without parent i.e. server-group
|
// Handle case for node without parent i.e. server-group
|
||||||
// or if parent node's inode is true.
|
// or if parent node's inode is true.
|
||||||
@ -1247,28 +1157,26 @@ define('pgadmin.browser', [
|
|||||||
|
|
||||||
// Parent node do not have any children, let me unload it.
|
// Parent node do not have any children, let me unload it.
|
||||||
if (!first && _ctx.t.wasLoad(_ctx.i)) {
|
if (!first && _ctx.t.wasLoad(_ctx.i)) {
|
||||||
_ctx.t.unload(_ctx.i, {
|
_ctx.t.unload(_ctx.i).then(() => {
|
||||||
success: function() {
|
findChildNode(
|
||||||
findChildNode(
|
selectNode,
|
||||||
selectNode,
|
function() {
|
||||||
function() {
|
var o = this && this.o;
|
||||||
var o = this && this.o;
|
if (
|
||||||
if (
|
o && o.fail && typeof(o.fail) == 'function'
|
||||||
o && o.fail && typeof(o.fail) == 'function'
|
) {
|
||||||
) {
|
o.fail.apply(this.t, [this.i, _data]);
|
||||||
o.fail.apply(this.t, [this.i, _data]);
|
}
|
||||||
}
|
}.bind(this)
|
||||||
}.bind(this)
|
);
|
||||||
);
|
},
|
||||||
}.bind(this),
|
() => {
|
||||||
fail: function() {
|
var o = this && this.o;
|
||||||
var o = this && this.o;
|
if (
|
||||||
if (
|
o && o.fail && typeof(o.fail) == 'function'
|
||||||
o && o.fail && typeof(o.fail) == 'function'
|
) {
|
||||||
) {
|
o.fail.apply(this.t, [this.i, _data]);
|
||||||
o.fail.apply(this.t, [this.i, _data]);
|
}
|
||||||
}
|
|
||||||
}.bind(this),
|
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1342,7 +1250,8 @@ define('pgadmin.browser', [
|
|||||||
&& this.t.parent(this.i)) || null,
|
&& this.t.parent(this.i)) || null,
|
||||||
_item_grand_parent = _item_parent ?
|
_item_grand_parent = _item_parent ?
|
||||||
(this.t.hasParent(_item_parent)
|
(this.t.hasParent(_item_parent)
|
||||||
&& this.t.parent(_item_parent))
|
&& this.t.parent(_item_parent) &&
|
||||||
|
_item_parent.root != this.t.parent(_item_parent))
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
// Remove the current node first.
|
// Remove the current node first.
|
||||||
@ -1358,13 +1267,13 @@ define('pgadmin.browser', [
|
|||||||
} else {
|
} else {
|
||||||
var postRemove = function() {
|
var postRemove = function() {
|
||||||
// If item has parent but no grand parent
|
// If item has parent but no grand parent
|
||||||
if (_item_parent && !_item_grand_parent) {
|
if (_item_parent.path !== '/browser' && !_item_grand_parent) {
|
||||||
var parent = null;
|
var parent = null;
|
||||||
// We need to search in all parent siblings (eg: server groups)
|
// We need to search in all parent siblings (eg: server groups)
|
||||||
var parents = this.t.siblings(this.i) || [];
|
var parents = this.t.siblings(this.i) || [];
|
||||||
parents.push(this.i[0]);
|
parents.push(this.i);
|
||||||
_.each(parents, function (p) {
|
_.each(parents, function (p) {
|
||||||
var d = self.t.itemData($(p));
|
var d = self.t.itemData(p);
|
||||||
// If new server group found then assign it parent
|
// If new server group found then assign it parent
|
||||||
if(d._id == self.new._pid) {
|
if(d._id == self.new._pid) {
|
||||||
parent = p;
|
parent = p;
|
||||||
@ -1383,7 +1292,6 @@ define('pgadmin.browser', [
|
|||||||
this.notFound = errorOut;
|
this.notFound = errorOut;
|
||||||
|
|
||||||
// var _d = {_id: this.new._pid, _type: self.d._type};
|
// var _d = {_id: this.new._pid, _type: self.d._type};
|
||||||
parent = $(parent);
|
|
||||||
var loaded = this.t.wasLoad(parent),
|
var loaded = this.t.wasLoad(parent),
|
||||||
onLoad = function() {
|
onLoad = function() {
|
||||||
self.i = parent;
|
self.i = parent;
|
||||||
@ -1393,19 +1301,19 @@ define('pgadmin.browser', [
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (!loaded && self.load) {
|
if (!loaded && self.load) {
|
||||||
self.t.open(parent, {
|
self.t.open(parent).then(
|
||||||
success: onLoad,
|
() => {
|
||||||
unanimated: true,
|
onLoad();
|
||||||
fail: function() {
|
},
|
||||||
|
() => {
|
||||||
var fail = self && self.o && self.o.fail;
|
var fail = self && self.o && self.o.fail;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
fail && typeof(fail) == 'function'
|
fail && typeof(fail) == 'function'
|
||||||
) {
|
) {
|
||||||
fail.apply(self.t, []);
|
fail.apply(self.t, []);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
});
|
);
|
||||||
} else {
|
} else {
|
||||||
onLoad();
|
onLoad();
|
||||||
}
|
}
|
||||||
@ -1438,30 +1346,17 @@ define('pgadmin.browser', [
|
|||||||
}
|
}
|
||||||
}.bind(this);
|
}.bind(this);
|
||||||
|
|
||||||
// If there is a parent then we can remove the node
|
this.t.remove(this.i).then(() => {
|
||||||
this.t.remove(this.i, {
|
findParent();
|
||||||
success: function() {
|
if (_item_parent && !_item_grand_parent && _parent
|
||||||
// Find the parent
|
|
||||||
findParent();
|
|
||||||
// If server group have no children then close it and set inode
|
|
||||||
// and unload it so it can fetch new data on next expand
|
|
||||||
if (_item_parent && !_item_grand_parent && _parent
|
|
||||||
&& self.t.children(_parent).length == 0) {
|
&& self.t.children(_parent).length == 0) {
|
||||||
self.t.setInode(_parent, {
|
self.t.unload(_parent).then( () => { setTimeout(postRemove); });
|
||||||
success: function() {
|
}
|
||||||
self.t.unload(_parent, {success: function() {
|
else {
|
||||||
setTimeout(postRemove);
|
setTimeout(postRemove);
|
||||||
}}
|
}
|
||||||
);
|
return true;
|
||||||
},
|
});
|
||||||
});
|
|
||||||
} else {
|
|
||||||
setTimeout(postRemove);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1605,7 +1500,7 @@ define('pgadmin.browser', [
|
|||||||
s = 0, e = items.length - 1, i,
|
s = 0, e = items.length - 1, i,
|
||||||
linearSearch = function() {
|
linearSearch = function() {
|
||||||
while (e >= s) {
|
while (e >= s) {
|
||||||
i = items.eq(s);
|
i = items[s];
|
||||||
var d = __ctx.t.itemData(i);
|
var d = __ctx.t.itemData(i);
|
||||||
if (d._type === 'column') {
|
if (d._type === 'column') {
|
||||||
if (pgAdmin.numeric_comparator(d._id, _new._id) == 1)
|
if (pgAdmin.numeric_comparator(d._id, _new._id) == 1)
|
||||||
@ -1617,7 +1512,7 @@ define('pgadmin.browser', [
|
|||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
if (e != items.length - 1) {
|
if (e != items.length - 1) {
|
||||||
i = items.eq(e+1);
|
i = items[e+1];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
i = null;
|
i = null;
|
||||||
@ -1625,7 +1520,7 @@ define('pgadmin.browser', [
|
|||||||
},
|
},
|
||||||
binarySearch = function() {
|
binarySearch = function() {
|
||||||
while (e - s > 22) {
|
while (e - s > 22) {
|
||||||
i = items.eq(s);
|
i = items[s];
|
||||||
var d = __ctx.t.itemData(i);
|
var d = __ctx.t.itemData(i);
|
||||||
if (d._type === 'column') {
|
if (d._type === 'column') {
|
||||||
if (pgAdmin.numeric_comparator(d._id, _new._id) != -1)
|
if (pgAdmin.numeric_comparator(d._id, _new._id) != -1)
|
||||||
@ -1634,7 +1529,7 @@ define('pgadmin.browser', [
|
|||||||
if (pgAdmin.natural_sort(d._label, _new._label) != -1)
|
if (pgAdmin.natural_sort(d._label, _new._label) != -1)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
i = items.eq(e);
|
i = items[e];
|
||||||
d = __ctx.t.itemData(i);
|
d = __ctx.t.itemData(i);
|
||||||
let result;
|
let result;
|
||||||
if (d._type === 'column') {
|
if (d._type === 'column') {
|
||||||
@ -1644,14 +1539,14 @@ define('pgadmin.browser', [
|
|||||||
}
|
}
|
||||||
if (result !=1) {
|
if (result !=1) {
|
||||||
if (e != items.length - 1) {
|
if (e != items.length - 1) {
|
||||||
i = items.eq(e+1);
|
i = items[e+1];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
i = null;
|
i = null;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var m = s + Math.round((e - s) / 2);
|
var m = s + Math.round((e - s) / 2);
|
||||||
i = items.eq(m);
|
i = items[m];
|
||||||
d = __ctx.t.itemData(i);
|
d = __ctx.t.itemData(i);
|
||||||
if(d._type === 'column'){
|
if(d._type === 'column'){
|
||||||
result = pgAdmin.numeric_comparator(d._id, _new._id);
|
result = pgAdmin.numeric_comparator(d._id, _new._id);
|
||||||
@ -1698,9 +1593,8 @@ define('pgadmin.browser', [
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
var _appendNode = function() {
|
var _appendNode = function() {
|
||||||
__ctx.t.append(__ctx.i, {
|
__ctx.t.append(__ctx.i, _new).then(
|
||||||
itemData: _new,
|
() => {
|
||||||
success: function() {
|
|
||||||
var new_item = $(arguments[1].items[0]);
|
var new_item = $(arguments[1].items[0]);
|
||||||
__ctx.t.openPath(new_item);
|
__ctx.t.openPath(new_item);
|
||||||
__ctx.t.select(new_item);
|
__ctx.t.select(new_item);
|
||||||
@ -1710,7 +1604,7 @@ define('pgadmin.browser', [
|
|||||||
__ctx.o.success.apply(__ctx.t, [__ctx.i, _old, _new]);
|
__ctx.o.success.apply(__ctx.t, [__ctx.i, _old, _new]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
fail: function() {
|
() => {
|
||||||
console.warn('Failed to append...', arguments);
|
console.warn('Failed to append...', arguments);
|
||||||
if (
|
if (
|
||||||
__ctx.o && __ctx.o.fail && typeof(__ctx.o.fail) == 'function'
|
__ctx.o && __ctx.o.fail && typeof(__ctx.o.fail) == 'function'
|
||||||
@ -1718,7 +1612,7 @@ define('pgadmin.browser', [
|
|||||||
__ctx.o.fail.apply(__ctx.t, [__ctx.i, _old, _new]);
|
__ctx.o.fail.apply(__ctx.t, [__ctx.i, _old, _new]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
// If the current node's inode is false
|
// If the current node's inode is false
|
||||||
@ -1735,29 +1629,28 @@ define('pgadmin.browser', [
|
|||||||
|
|
||||||
// Parent node do not have any children, let me unload it.
|
// Parent node do not have any children, let me unload it.
|
||||||
if (!first && _ctx.t.wasLoad(_ctx.i)) {
|
if (!first && _ctx.t.wasLoad(_ctx.i)) {
|
||||||
_ctx.t.unload(_ctx.i, {
|
_ctx.t.unload(_ctx.i).then( () => {
|
||||||
success: function() {
|
findChildNode(
|
||||||
findChildNode(
|
selectNode,
|
||||||
selectNode,
|
function() {
|
||||||
function() {
|
var o = this && this.o;
|
||||||
var o = this && this.o;
|
if (
|
||||||
if (
|
o && o.fail && typeof(o.fail) == 'function'
|
||||||
o && o.fail && typeof(o.fail) == 'function'
|
) {
|
||||||
) {
|
o.fail.apply(this.t, [this.i, _old, _new]);
|
||||||
o.fail.apply(this.t, [this.i, _old, _new]);
|
}
|
||||||
}
|
|
||||||
}.bind(this)
|
|
||||||
);
|
|
||||||
}.bind(this),
|
|
||||||
fail: function() {
|
|
||||||
var o = this && this.o;
|
|
||||||
if (
|
|
||||||
o && o.fail && typeof(o.fail) == 'function'
|
|
||||||
) {
|
|
||||||
o.fail.apply(this.t, [this.i, _old, _new]);
|
|
||||||
}
|
}
|
||||||
}.bind(this),
|
);
|
||||||
});
|
},
|
||||||
|
() => {
|
||||||
|
var o = this && this.o;
|
||||||
|
if (
|
||||||
|
o && o.fail && typeof(o.fail) == 'function'
|
||||||
|
) {
|
||||||
|
o.fail.apply(this.t, [this.i, _old, _new]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1799,6 +1692,11 @@ define('pgadmin.browser', [
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onRefreshTreeNodeReact: function(_i) {
|
||||||
|
this.tree.refresh(_i);
|
||||||
|
return;
|
||||||
|
},
|
||||||
|
|
||||||
onRefreshTreeNode: function(_i, _opts) {
|
onRefreshTreeNode: function(_i, _opts) {
|
||||||
var _d = _i && this.tree.itemData(_i),
|
var _d = _i && this.tree.itemData(_i),
|
||||||
n = _d && _d._type && this.Nodes[_d._type],
|
n = _d && _d._type && this.Nodes[_d._type],
|
||||||
@ -2034,10 +1932,10 @@ define('pgadmin.browser', [
|
|||||||
|
|
||||||
if (_selectNext) {
|
if (_selectNext) {
|
||||||
nodeToSelect = tree_local.next(_node);
|
nodeToSelect = tree_local.next(_node);
|
||||||
if (!nodeToSelect || !nodeToSelect.length) {
|
if (!nodeToSelect) {
|
||||||
nodeToSelect = tree_local.prev(_node);
|
nodeToSelect = tree_local.prev(_node);
|
||||||
|
|
||||||
if (!nodeToSelect || !nodeToSelect.length) {
|
if (!nodeToSelect) {
|
||||||
if (!_parentNode) {
|
if (!_parentNode) {
|
||||||
nodeToSelect = tree_local.parent(_node);
|
nodeToSelect = tree_local.parent(_node);
|
||||||
} else {
|
} else {
|
||||||
@ -2048,6 +1946,7 @@ define('pgadmin.browser', [
|
|||||||
if (nodeToSelect)
|
if (nodeToSelect)
|
||||||
tree_local.select(nodeToSelect);
|
tree_local.select(nodeToSelect);
|
||||||
}
|
}
|
||||||
|
|
||||||
tree_local.remove(_node);
|
tree_local.remove(_node);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
@ -99,7 +99,7 @@ define([
|
|||||||
$msgContainer = '',
|
$msgContainer = '',
|
||||||
// This will be the URL, used for object manipulation.
|
// This will be the URL, used for object manipulation.
|
||||||
urlBase = this.generate_url(item, 'properties', data),
|
urlBase = this.generate_url(item, 'properties', data),
|
||||||
info = this.getTreeNodeHierarchy.apply(this, [item]),
|
info = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
gridSchema = Backform.generateGridColumnsFromModel(
|
gridSchema = Backform.generateGridColumnsFromModel(
|
||||||
info, node.model, 'properties', that.columns
|
info, node.model, 'properties', that.columns
|
||||||
),
|
),
|
||||||
@ -496,7 +496,7 @@ define([
|
|||||||
var collectionPickFunction = function (treeInfoValue, treeInfoKey) {
|
var collectionPickFunction = function (treeInfoValue, treeInfoKey) {
|
||||||
return (treeInfoKey != self.type);
|
return (treeInfoKey != self.type);
|
||||||
};
|
};
|
||||||
var treeInfo = this.getTreeNodeHierarchy(item);
|
var treeInfo = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
var actionType = type in opURL ? opURL[type] : type;
|
var actionType = type in opURL ? opURL[type] : type;
|
||||||
return generateUrl.generate_url(
|
return generateUrl.generate_url(
|
||||||
pgAdmin.Browser.URL, treeInfo, actionType, self.node,
|
pgAdmin.Browser.URL, treeInfo, actionType, self.node,
|
||||||
@ -517,7 +517,7 @@ define([
|
|||||||
var input = args || {},
|
var input = args || {},
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
pgBrowser.psql.psql_tool(d, i, true);
|
pgBrowser.psql.psql_tool(d, i, true);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -244,7 +244,7 @@ _.extend(pgBrowser.keyboardNavigation, {
|
|||||||
const tree = this.getTreeDetails();
|
const tree = this.getTreeDetails();
|
||||||
|
|
||||||
$('#tree').trigger('focus');
|
$('#tree').trigger('focus');
|
||||||
tree.t.focus(tree.i);
|
// tree.t.focus(tree.i);
|
||||||
tree.t.select(tree.i);
|
tree.t.select(tree.i);
|
||||||
},
|
},
|
||||||
bindSubMenuQueryTool: function() {
|
bindSubMenuQueryTool: function() {
|
||||||
@ -370,8 +370,8 @@ _.extend(pgBrowser.keyboardNavigation, {
|
|||||||
},
|
},
|
||||||
getTreeDetails: function() {
|
getTreeDetails: function() {
|
||||||
const aciTree = pgAdmin.Browser.tree;
|
const aciTree = pgAdmin.Browser.tree;
|
||||||
const selectedTreeNode = aciTree.selected().length > 0 ? aciTree.selected() : aciTree.first();
|
const selectedTreeNode = aciTree.selected() ? aciTree.selected() : aciTree.first();
|
||||||
const selectedTreeNodeData = selectedTreeNode && selectedTreeNode.length === 1 ? aciTree.itemData(selectedTreeNode) : undefined;
|
const selectedTreeNodeData = selectedTreeNode ? aciTree.itemData(selectedTreeNode) : undefined;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
t: aciTree,
|
t: aciTree,
|
||||||
|
@ -89,7 +89,7 @@ _.extend(pgBrowser, {
|
|||||||
browser.reflectLocklayoutChange(docker);
|
browser.reflectLocklayoutChange(docker);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, 500);
|
}, 5000);
|
||||||
},
|
},
|
||||||
|
|
||||||
reflectLocklayoutChange: function(docker) {
|
reflectLocklayoutChange: function(docker) {
|
||||||
|
@ -10,13 +10,13 @@
|
|||||||
import {getNodeView, removeNodeView} from './node_view';
|
import {getNodeView, removeNodeView} from './node_view';
|
||||||
|
|
||||||
define('pgadmin.browser.node', [
|
define('pgadmin.browser.node', [
|
||||||
'sources/tree/pgadmin_tree_node', 'sources/url_for',
|
'sources/url_for',
|
||||||
'sources/gettext', 'jquery', 'underscore', 'sources/pgadmin',
|
'sources/gettext', 'jquery', 'underscore', 'sources/pgadmin',
|
||||||
'pgadmin.browser.menu', 'backbone', 'pgadmin.alertifyjs', 'pgadmin.browser.datamodel',
|
'pgadmin.browser.menu', 'backbone', 'pgadmin.alertifyjs', 'pgadmin.browser.datamodel',
|
||||||
'backform', 'sources/browser/generate_url', 'pgadmin.help', 'sources/utils',
|
'backform', 'sources/browser/generate_url', 'pgadmin.help', 'sources/utils',
|
||||||
'pgadmin.browser.utils', 'pgadmin.backform',
|
'pgadmin.browser.utils', 'pgadmin.backform',
|
||||||
], function(
|
], function(
|
||||||
pgadminTreeNode, url_for,
|
url_for,
|
||||||
gettext, $, _, pgAdmin,
|
gettext, $, _, pgAdmin,
|
||||||
Menu, Backbone, Alertify, pgBrowser,
|
Menu, Backbone, Alertify, pgBrowser,
|
||||||
Backform, generateUrl, help,
|
Backform, generateUrl, help,
|
||||||
@ -269,8 +269,7 @@ define('pgadmin.browser.node', [
|
|||||||
if (itemData._type == 'database' && !itemData.allowConn)
|
if (itemData._type == 'database' && !itemData.allowConn)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var node = pgBrowser.Nodes[itemData._type],
|
var parentData = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
parentData = node.getTreeNodeHierarchy(item);
|
|
||||||
if (_.indexOf(['create', 'insert', 'update', 'delete'], data.script) != -1) {
|
if (_.indexOf(['create', 'insert', 'update', 'delete'], data.script) != -1) {
|
||||||
if (itemData.type == 'role' &&
|
if (itemData.type == 'role' &&
|
||||||
parentData.server.user.can_create_role) {
|
parentData.server.user.can_create_role) {
|
||||||
@ -325,7 +324,7 @@ define('pgadmin.browser.node', [
|
|||||||
}
|
}
|
||||||
|
|
||||||
// We know - which data model to be used for this object.
|
// We know - which data model to be used for this object.
|
||||||
var info = this.getTreeNodeHierarchy.apply(this, [item]),
|
var info = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
newModel = new(this.model.extend({
|
newModel = new(this.model.extend({
|
||||||
urlRoot: urlBase,
|
urlRoot: urlBase,
|
||||||
}))(
|
}))(
|
||||||
@ -450,7 +449,7 @@ define('pgadmin.browser.node', [
|
|||||||
},
|
},
|
||||||
error: function(model, xhr, options) {
|
error: function(model, xhr, options) {
|
||||||
var _label = that && item ?
|
var _label = that && item ?
|
||||||
that.getTreeNodeHierarchy(
|
pgBrowser.tree.getTreeNodeHierarchy(
|
||||||
item
|
item
|
||||||
)[that.type].label : '';
|
)[that.type].label : '';
|
||||||
pgBrowser.Events.trigger(
|
pgBrowser.Events.trigger(
|
||||||
@ -594,7 +593,7 @@ define('pgadmin.browser.node', [
|
|||||||
show_obj_properties: function(args, item) {
|
show_obj_properties: function(args, item) {
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = (args && args.item) || item || t.selected(),
|
i = (args && args.item) || item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
d = i ? t.itemData(i) : undefined,
|
||||||
o = this,
|
o = this,
|
||||||
l = o.title.apply(this, [d]);
|
l = o.title.apply(this, [d]);
|
||||||
|
|
||||||
@ -786,7 +785,7 @@ define('pgadmin.browser.node', [
|
|||||||
obj = this,
|
obj = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || item || t.selected(),
|
i = input.item || item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return;
|
return;
|
||||||
@ -882,7 +881,7 @@ define('pgadmin.browser.node', [
|
|||||||
obj,
|
obj,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = item || t.selected(),
|
i = item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return;
|
return;
|
||||||
@ -920,7 +919,7 @@ define('pgadmin.browser.node', [
|
|||||||
var preference = pgBrowser.get_preference('sqleditor', 'copy_sql_to_query_tool');
|
var preference = pgBrowser.get_preference('sqleditor', 'copy_sql_to_query_tool');
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = item || t.selected(),
|
i = item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return;
|
return;
|
||||||
@ -944,7 +943,7 @@ define('pgadmin.browser.node', [
|
|||||||
var input = args || {},
|
var input = args || {},
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
pgBrowser.psql.psql_tool(d, i, true);
|
pgBrowser.psql.psql_tool(d, i, true);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -988,32 +987,7 @@ define('pgadmin.browser.node', [
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
added: function(item, data, browser) {
|
added: function(item, data) {
|
||||||
var b = browser || pgBrowser,
|
|
||||||
t = b.tree,
|
|
||||||
pItem = t.parent(item),
|
|
||||||
pData = pItem && t.itemData(pItem),
|
|
||||||
pNode = pData && pgBrowser.Nodes[pData._type];
|
|
||||||
|
|
||||||
// Check node is a collection or not.
|
|
||||||
if (pNode && pNode.is_collection) {
|
|
||||||
/* If 'collection_count' is not present in data
|
|
||||||
* it means tree node expanded first time, so we will
|
|
||||||
* kept collection count and label in data itself.
|
|
||||||
*/
|
|
||||||
if (!('collection_count' in pData)) {
|
|
||||||
pData.collection_count = 0;
|
|
||||||
}
|
|
||||||
pData.collection_count++;
|
|
||||||
t.setLabel(
|
|
||||||
pItem, {
|
|
||||||
label: (
|
|
||||||
_.escape(pData._label) + ' <span>(' + pData.collection_count + ')</span>'
|
|
||||||
),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
pgBrowser.Events.trigger('pgadmin:browser:tree:expand-from-previous-tree-state',
|
pgBrowser.Events.trigger('pgadmin:browser:tree:expand-from-previous-tree-state',
|
||||||
item);
|
item);
|
||||||
pgBrowser.Node.callbacks.change_server_background(item, data);
|
pgBrowser.Node.callbacks.change_server_background(item, data);
|
||||||
@ -1050,43 +1024,11 @@ define('pgadmin.browser.node', [
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
removed: function(item) {
|
removed: function(item) {
|
||||||
var self = this,
|
var self = this;
|
||||||
t = pgBrowser.tree,
|
|
||||||
pItem = t.parent(item),
|
|
||||||
pData = pItem && t.itemData(pItem),
|
|
||||||
pNode = pData && pgBrowser.Nodes[pData._type];
|
|
||||||
|
|
||||||
// Check node is a collection or not.
|
|
||||||
if (
|
|
||||||
pNode && pNode.is_collection && 'collection_count' in pData
|
|
||||||
) {
|
|
||||||
pData.collection_count--;
|
|
||||||
t.setLabel(
|
|
||||||
pItem, {
|
|
||||||
label: (
|
|
||||||
_.escape(pData._label) + ' <span>(' + pData.collection_count + ')</span>'
|
|
||||||
),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
self.clear_cache.apply(self, item);
|
self.clear_cache.apply(self, item);
|
||||||
}, 0);
|
}, 0);
|
||||||
},
|
},
|
||||||
unloaded: function(item) {
|
|
||||||
var self = this,
|
|
||||||
t = pgBrowser.tree,
|
|
||||||
data = item && t.itemData(item);
|
|
||||||
|
|
||||||
// In case of unload remove the collection counter
|
|
||||||
if (self.is_collection && data === Object(data) &&'collection_count' in data) {
|
|
||||||
delete data.collection_count;
|
|
||||||
t.setLabel(item, {
|
|
||||||
label: _.escape(data._label),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
refresh: function(cmd, _item) {
|
refresh: function(cmd, _item) {
|
||||||
var self = this,
|
var self = this,
|
||||||
t = pgBrowser.tree,
|
t = pgBrowser.tree,
|
||||||
@ -1232,8 +1174,7 @@ define('pgadmin.browser.node', [
|
|||||||
// Avoid unnecessary reloads
|
// Avoid unnecessary reloads
|
||||||
var i = tree.selected(),
|
var i = tree.selected(),
|
||||||
d = i && tree.itemData(i),
|
d = i && tree.itemData(i),
|
||||||
n = i && d && pgBrowser.Nodes[d._type],
|
treeHierarchy = tree.getTreeNodeHierarchy(i);
|
||||||
treeHierarchy = n.getTreeNodeHierarchy(i);
|
|
||||||
|
|
||||||
if (_.isEqual($(this).data('node-prop'), treeHierarchy)) {
|
if (_.isEqual($(this).data('node-prop'), treeHierarchy)) {
|
||||||
return;
|
return;
|
||||||
@ -1246,7 +1187,7 @@ define('pgadmin.browser.node', [
|
|||||||
removeNodeView(j[0]);
|
removeNodeView(j[0]);
|
||||||
/* getSchema is a schema for React. Get the react node view */
|
/* getSchema is a schema for React. Get the react node view */
|
||||||
if(that.getSchema) {
|
if(that.getSchema) {
|
||||||
let treeNodeInfo = that.getTreeNodeHierarchy.apply(this, [item]);
|
let treeNodeInfo = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
getNodeView(
|
getNodeView(
|
||||||
that.type, treeNodeInfo, 'properties', data, 'tab', j[0], this, onEdit
|
that.type, treeNodeInfo, 'properties', data, 'tab', j[0], this, onEdit
|
||||||
);
|
);
|
||||||
@ -1323,7 +1264,7 @@ define('pgadmin.browser.node', [
|
|||||||
}.bind(panel),
|
}.bind(panel),
|
||||||
onSqlHelp = function() {
|
onSqlHelp = function() {
|
||||||
// Construct the URL
|
// Construct the URL
|
||||||
var server = that.getTreeNodeHierarchy(item).server;
|
var server = pgBrowser.tree.getTreeNodeHierarchy(item).server;
|
||||||
|
|
||||||
var url = pgBrowser.utils.pg_help_path;
|
var url = pgBrowser.utils.pg_help_path;
|
||||||
if (server.server_type == 'ppas') {
|
if (server.server_type == 'ppas') {
|
||||||
@ -1507,7 +1448,7 @@ define('pgadmin.browser.node', [
|
|||||||
removeNodeView(j[0]);
|
removeNodeView(j[0]);
|
||||||
/* getSchema is a schema for React. Get the react node view */
|
/* getSchema is a schema for React. Get the react node view */
|
||||||
if(that.getSchema) {
|
if(that.getSchema) {
|
||||||
let treeNodeInfo = that.getTreeNodeHierarchy.apply(this, [item]);
|
let treeNodeInfo = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
getNodeView(
|
getNodeView(
|
||||||
that.type, treeNodeInfo, action, data, 'dialog', j[0], this, onEdit,
|
that.type, treeNodeInfo, action, data, 'dialog', j[0], this, onEdit,
|
||||||
(nodeData)=>{
|
(nodeData)=>{
|
||||||
@ -1884,7 +1825,7 @@ define('pgadmin.browser.node', [
|
|||||||
self = this,
|
self = this,
|
||||||
priority = -Infinity;
|
priority = -Infinity;
|
||||||
var treeInfo = (_.isUndefined(item) || _.isNull(item)) ?
|
var treeInfo = (_.isUndefined(item) || _.isNull(item)) ?
|
||||||
info || {} : this.getTreeNodeHierarchy(item);
|
info || {} : pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
var actionType = type in opURL ? opURL[type] : type;
|
var actionType = type in opURL ? opURL[type] : type;
|
||||||
var itemID = with_id && d._type == self.type ? encodeURIComponent(d._id) : '';
|
var itemID = with_id && d._type == self.type ? encodeURIComponent(d._id) : '';
|
||||||
|
|
||||||
@ -1921,7 +1862,6 @@ define('pgadmin.browser.node', [
|
|||||||
Collection: pgBrowser.DataCollection,
|
Collection: pgBrowser.DataCollection,
|
||||||
// Base class for Node Data Model
|
// Base class for Node Data Model
|
||||||
Model: pgBrowser.DataModel,
|
Model: pgBrowser.DataModel,
|
||||||
getTreeNodeHierarchy: pgadminTreeNode.getTreeNodeHierarchyFromIdentifier.bind(pgBrowser),
|
|
||||||
cache: function(url, node_info, level, data) {
|
cache: function(url, node_info, level, data) {
|
||||||
var cached = this.cached = this.cached || {},
|
var cached = this.cached = this.cached || {},
|
||||||
hash = url,
|
hash = url,
|
||||||
@ -1938,7 +1878,7 @@ define('pgadmin.browser.node', [
|
|||||||
)), function(o) {
|
)), function(o) {
|
||||||
return o.priority;
|
return o.priority;
|
||||||
}), function(o) {
|
}), function(o) {
|
||||||
hash = commonUtils.sprintf('%s/%s', hash, encodeURI(o._id));
|
hash = commonUtils.sprintf('%s_%s', hash, encodeURI(o._id));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ import * as Alertify from 'pgadmin.alertifyjs';
|
|||||||
import * as SqlEditorUtils from 'sources/sqleditor_utils';
|
import * as SqlEditorUtils from 'sources/sqleditor_utils';
|
||||||
import pgWindow from 'sources/window';
|
import pgWindow from 'sources/window';
|
||||||
|
|
||||||
var modifyAnimation = require('sources/modify_animation');
|
//var modifyAnimation = require('sources/modify_animation');
|
||||||
|
|
||||||
const pgBrowser = pgAdmin.Browser = pgAdmin.Browser || {};
|
const pgBrowser = pgAdmin.Browser = pgAdmin.Browser || {};
|
||||||
|
|
||||||
@ -91,10 +91,10 @@ _.extend(pgBrowser, {
|
|||||||
self.preference_version(self.generate_preference_version());
|
self.preference_version(self.generate_preference_version());
|
||||||
|
|
||||||
pgBrowser.keyboardNavigation.init();
|
pgBrowser.keyboardNavigation.init();
|
||||||
if(pgBrowser.tree) {
|
// if(pgBrowser.tree) {
|
||||||
modifyAnimation.modifyAcitreeAnimation(self);
|
// modifyAnimation.modifyAcitreeAnimation(self);
|
||||||
modifyAnimation.modifyAlertifyAnimation(self);
|
// modifyAnimation.modifyAlertifyAnimation(self);
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Initialize Tree saving/reloading
|
// Initialize Tree saving/reloading
|
||||||
pgBrowser.browserTreeState.init();
|
pgBrowser.browserTreeState.init();
|
||||||
|
@ -123,7 +123,7 @@ export function initializeToolbar(panel, wcDocker) {
|
|||||||
var input = {},
|
var input = {},
|
||||||
t = pgAdmin.Browser.tree,
|
t = pgAdmin.Browser.tree,
|
||||||
i = input.item || t.selected(),
|
i = input.item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
pgAdmin.Browser.psql.psql_tool(d, i, true);
|
pgAdmin.Browser.psql.psql_tool(d, i, true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -272,16 +272,16 @@ define('pgadmin.dashboard', [
|
|||||||
// The server connected may not be the same one, which was selected, and
|
// The server connected may not be the same one, which was selected, and
|
||||||
// we do care out the current selected one only.
|
// we do care out the current selected one only.
|
||||||
if (item.length != 0) {
|
if (item.length != 0) {
|
||||||
this.object_selected(item, itemData, pgBrowser.Nodes[itemData._type]);
|
this.object_selected(item, itemData);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Handle treeview clicks
|
// Handle treeview clicks
|
||||||
object_selected: function(item, itemData, node) {
|
object_selected: function(item, itemData) {
|
||||||
let self = this;
|
let self = this;
|
||||||
|
|
||||||
if (itemData && itemData._type) {
|
if (itemData && itemData._type) {
|
||||||
var treeHierarchy = node.getTreeNodeHierarchy(item),
|
var treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
url = NodesDashboard.url(itemData, item, treeHierarchy);
|
url = NodesDashboard.url(itemData, item, treeHierarchy);
|
||||||
|
|
||||||
if (url === null) {
|
if (url === null) {
|
||||||
@ -1142,11 +1142,10 @@ define('pgadmin.dashboard', [
|
|||||||
} else {
|
} else {
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = t.selected(),
|
i = t.selected(),
|
||||||
d = i && t.itemData(i),
|
d = i && t.itemData(i);
|
||||||
n = i && d && pgBrowser.Nodes[d._type];
|
|
||||||
|
|
||||||
this.chartsDomObj && this.chartsDomObj.setPageVisible(dashboardVisible);
|
this.chartsDomObj && this.chartsDomObj.setPageVisible(dashboardVisible);
|
||||||
this.object_selected(i, d, n);
|
this.object_selected(i, d);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
can_take_action: function(m) {
|
can_take_action: function(m) {
|
||||||
|
@ -168,7 +168,7 @@ define('misc.dependencies', [
|
|||||||
$container = panel.layout().scene().find('.pg-panel-content'),
|
$container = panel.layout().scene().find('.pg-panel-content'),
|
||||||
$msgContainer = $container.find('.pg-panel-depends-message'),
|
$msgContainer = $container.find('.pg-panel-depends-message'),
|
||||||
$gridContainer = $container.find('.pg-panel-dependencies-container'),
|
$gridContainer = $container.find('.pg-panel-dependencies-container'),
|
||||||
treeHierarchy = node.getTreeNodeHierarchy(item);
|
treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
|
|
||||||
if (node) {
|
if (node) {
|
||||||
/* We fetch the Dependencies and Dependencies tab only for
|
/* We fetch the Dependencies and Dependencies tab only for
|
||||||
@ -294,6 +294,128 @@ define('misc.dependencies', [
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
showReactDependencies: function(item, data, node) {
|
||||||
|
let self = this,
|
||||||
|
msg = gettext('Please select an object in the tree view.'),
|
||||||
|
panel = this.dependenciesPanel,
|
||||||
|
$container = panel.layout().scene().find('.pg-panel-content'),
|
||||||
|
$msgContainer = $container.find('.pg-panel-depends-message'),
|
||||||
|
$gridContainer = $container.find('.pg-panel-dependencies-container'),
|
||||||
|
treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
|
n_type = data._type,
|
||||||
|
url = node.generate_url_react(item, 'dependency');
|
||||||
|
|
||||||
|
if (node) {
|
||||||
|
/* We fetch the Dependencies and Dependencies tab only for
|
||||||
|
* those node who set the parameter hasDepends to true.
|
||||||
|
*/
|
||||||
|
msg = gettext('No dependency information is available for the selected object.');
|
||||||
|
if (node.hasDepends) {
|
||||||
|
/* Updating the label for the 'field' type of the backbone model.
|
||||||
|
* Label should be "Database" if the node type is tablespace or role
|
||||||
|
* and dependencies tab is selected. For other nodes and dependencies tab
|
||||||
|
* it should be 'Restriction'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
this.dependenciesGrid.columns.models[2].set({
|
||||||
|
'label': gettext('Restriction'),
|
||||||
|
});
|
||||||
|
|
||||||
|
// Hide message container and show grid container.
|
||||||
|
$msgContainer.addClass('d-none');
|
||||||
|
$gridContainer.removeClass('d-none');
|
||||||
|
|
||||||
|
var timer = '';
|
||||||
|
$.ajax({
|
||||||
|
url: url,
|
||||||
|
type: 'GET',
|
||||||
|
beforeSend: function(xhr) {
|
||||||
|
xhr.setRequestHeader(pgAdmin.csrf_token_header, pgAdmin.csrf_token);
|
||||||
|
// Generate a timer for the request
|
||||||
|
timer = setTimeout(function() {
|
||||||
|
// notify user if request is taking longer than 1 second
|
||||||
|
|
||||||
|
$msgContainer.text(gettext('Fetching dependency information from the server...'));
|
||||||
|
$msgContainer.removeClass('d-none');
|
||||||
|
msg = '';
|
||||||
|
|
||||||
|
}, 1000);
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.done(function(res) {
|
||||||
|
clearTimeout(timer);
|
||||||
|
|
||||||
|
if (res.length > 0) {
|
||||||
|
|
||||||
|
if (!$msgContainer.hasClass('d-none')) {
|
||||||
|
$msgContainer.addClass('d-none');
|
||||||
|
}
|
||||||
|
$gridContainer.removeClass('d-none');
|
||||||
|
|
||||||
|
self.dependenciesData = res;
|
||||||
|
|
||||||
|
// Load only 100 rows
|
||||||
|
self.dependenciesCollection.reset(self.dependenciesData.splice(0, 100), {parse: true});
|
||||||
|
|
||||||
|
// Load more rows on scroll down
|
||||||
|
pgBrowser.Events.on(
|
||||||
|
'pgadmin-browser:panel-dependencies:' +
|
||||||
|
wcDocker.EVENT.SCROLLED,
|
||||||
|
self.__loadMoreRows
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Do not listen the scroll event
|
||||||
|
pgBrowser.Events.off(
|
||||||
|
'pgadmin-browser:panel-dependencies:' +
|
||||||
|
wcDocker.EVENT.SCROLLED
|
||||||
|
);
|
||||||
|
|
||||||
|
self.dependenciesCollection.reset({silent: true});
|
||||||
|
$msgContainer.text(msg);
|
||||||
|
$msgContainer.removeClass('d-none');
|
||||||
|
|
||||||
|
if (!$gridContainer.hasClass('d-none')) {
|
||||||
|
$gridContainer.addClass('d-none');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
|
.fail(function(xhr, error, message) {
|
||||||
|
var _label = treeHierarchy[n_type].label;
|
||||||
|
pgBrowser.Events.trigger(
|
||||||
|
'pgadmin:node:retrieval:error', 'depends', xhr, error, message
|
||||||
|
);
|
||||||
|
if (!Alertify.pgHandleItemError(xhr, error, message, {
|
||||||
|
item: item,
|
||||||
|
info: treeHierarchy,
|
||||||
|
})) {
|
||||||
|
Alertify.pgNotifier(
|
||||||
|
error, xhr,
|
||||||
|
gettext('Error retrieving data from the server: %s', message || _label),
|
||||||
|
function(alertMsg) {
|
||||||
|
if(alertMsg === 'CRYPTKEY_SET') {
|
||||||
|
self.showDependencies(item, data, node);
|
||||||
|
} else {
|
||||||
|
console.warn(arguments);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// show failed message.
|
||||||
|
$msgContainer.text(gettext('Failed to retrieve data from the server.'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (msg != '') {
|
||||||
|
$msgContainer.text(msg);
|
||||||
|
$msgContainer.removeClass('d-none');
|
||||||
|
if (!$gridContainer.hasClass('d-none')) {
|
||||||
|
$gridContainer.addClass('d-none');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
__loadMoreRows: function() {
|
__loadMoreRows: function() {
|
||||||
if (this.dependenciesPanel.length < 1) return ;
|
if (this.dependenciesPanel.length < 1) return ;
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ define('misc.dependents', [
|
|||||||
if (visible) {
|
if (visible) {
|
||||||
this.dependentsPanel = pgBrowser.docker.findPanels('dependents')[0];
|
this.dependentsPanel = pgBrowser.docker.findPanels('dependents')[0];
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = t.selected(),
|
i = t && t.selected(),
|
||||||
d = i && t.itemData(i),
|
d = i && t.itemData(i),
|
||||||
n = i && d && pgBrowser.Nodes[d._type];
|
n = i && d && pgBrowser.Nodes[d._type];
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ define('misc.dependents', [
|
|||||||
$container = panel.layout().scene().find('.pg-panel-content'),
|
$container = panel.layout().scene().find('.pg-panel-content'),
|
||||||
$msgContainer = $container.find('.pg-panel-depends-message'),
|
$msgContainer = $container.find('.pg-panel-depends-message'),
|
||||||
$gridContainer = $container.find('.pg-panel-dependents-container'),
|
$gridContainer = $container.find('.pg-panel-dependents-container'),
|
||||||
treeHierarchy = node.getTreeNodeHierarchy(item);
|
treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
|
|
||||||
if (node) {
|
if (node) {
|
||||||
/* We fetch the Dependencies and Dependents tab only for
|
/* We fetch the Dependencies and Dependents tab only for
|
||||||
|
@ -57,6 +57,9 @@ define('misc.sql', [
|
|||||||
pgBrowser.Events.on(
|
pgBrowser.Events.on(
|
||||||
'pgadmin-browser:tree:selected', this.showSQL
|
'pgadmin-browser:tree:selected', this.showSQL
|
||||||
);
|
);
|
||||||
|
pgBrowser.Events.on(
|
||||||
|
'pgadmin-browser:tree:reactSelected', this.reactShowSQL
|
||||||
|
);
|
||||||
pgBrowser.Events.on(
|
pgBrowser.Events.on(
|
||||||
'pgadmin-browser:tree:refreshing', this.refreshSQL, this
|
'pgadmin-browser:tree:refreshing', this.refreshSQL, this
|
||||||
);
|
);
|
||||||
@ -66,6 +69,7 @@ define('misc.sql', [
|
|||||||
} else {
|
} else {
|
||||||
if ((sqlPanels[0].isVisible()) || sqlPanels.length != 1) {
|
if ((sqlPanels[0].isVisible()) || sqlPanels.length != 1) {
|
||||||
pgBrowser.Events.on('pgadmin-browser:tree:selected', this.showSQL);
|
pgBrowser.Events.on('pgadmin-browser:tree:selected', this.showSQL);
|
||||||
|
pgBrowser.Events.on('pgadmin-browser:tree:reactSelected', this.reactShowSQL);
|
||||||
pgBrowser.Events.on(
|
pgBrowser.Events.on(
|
||||||
'pgadmin-browser:tree:refreshing', this.refreshSQL, this
|
'pgadmin-browser:tree:refreshing', this.refreshSQL, this
|
||||||
);
|
);
|
||||||
@ -92,6 +96,7 @@ define('misc.sql', [
|
|||||||
* through. We will wait for some time before fetching the Reversed
|
* through. We will wait for some time before fetching the Reversed
|
||||||
* Engineering SQL.
|
* Engineering SQL.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
this.timeout && clearTimeout(this.timeout);
|
this.timeout && clearTimeout(this.timeout);
|
||||||
|
|
||||||
var that = this;
|
var that = this;
|
||||||
@ -102,7 +107,7 @@ define('misc.sql', [
|
|||||||
sql = '-- ' + gettext('No SQL could be generated for the selected object.');
|
sql = '-- ' + gettext('No SQL could be generated for the selected object.');
|
||||||
var n_type = data._type,
|
var n_type = data._type,
|
||||||
url = node.generate_url(item, 'sql', data, true),
|
url = node.generate_url(item, 'sql', data, true),
|
||||||
treeHierarchy = node.getTreeNodeHierarchy(item),
|
treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
cache_flag = {
|
cache_flag = {
|
||||||
node_type: n_type,
|
node_type: n_type,
|
||||||
url: url,
|
url: url,
|
||||||
|
@ -199,7 +199,7 @@ define('misc.statistics', [
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Avoid unnecessary reloads
|
// Avoid unnecessary reloads
|
||||||
var treeHierarchy = node.getTreeNodeHierarchy(item);
|
var treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
var cache_flag = {
|
var cache_flag = {
|
||||||
node_type: node_type,
|
node_type: node_type,
|
||||||
url: url,
|
url: url,
|
||||||
@ -210,7 +210,7 @@ define('misc.statistics', [
|
|||||||
// Cache the current IDs for next time
|
// Cache the current IDs for next time
|
||||||
$(panel[0]).data('node-prop', cache_flag);
|
$(panel[0]).data('node-prop', cache_flag);
|
||||||
|
|
||||||
if (statisticsHelper.nodeHasStatistics(node, item)) {
|
if (statisticsHelper.nodeHasStatistics(pgBrowser, node, item)) {
|
||||||
msg = '';
|
msg = '';
|
||||||
var timer;
|
var timer;
|
||||||
// Set the url, fetch the data and update the collection
|
// Set the url, fetch the data and update the collection
|
||||||
|
@ -495,7 +495,7 @@ define('pgadmin.preferences', [
|
|||||||
view: {duration: 75},
|
view: {duration: 75},
|
||||||
});
|
});
|
||||||
|
|
||||||
modifyAnimation.modifyAcitreeAnimation(pgBrowser, jTree.aciTree('api'));
|
if (jTree.aciTree('api')) modifyAnimation.modifyAcitreeAnimation(pgBrowser, jTree.aciTree('api'));
|
||||||
|
|
||||||
this.show();
|
this.show();
|
||||||
},
|
},
|
||||||
|
@ -13,11 +13,22 @@ define('app', [
|
|||||||
var initializeModules = function(Object) {
|
var initializeModules = function(Object) {
|
||||||
for (var key in Object) {
|
for (var key in Object) {
|
||||||
var module = Object[key];
|
var module = Object[key];
|
||||||
if (module.init && typeof module.init == 'function') {
|
|
||||||
module.init();
|
if (module && module.init && typeof module.init == 'function') {
|
||||||
|
try {
|
||||||
|
module.init();
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.warn(e.stack || e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (module.Init && typeof module.Init == 'function') {
|
else if (module && module.Init && typeof module.Init == 'function') {
|
||||||
module.Init();
|
try {
|
||||||
|
module.init();
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.warn(e.stack || e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
import gettext from '../gettext';
|
import gettext from '../gettext';
|
||||||
import {DialogFactory} from './dialog_factory';
|
import {DialogFactory} from './dialog_factory';
|
||||||
import Backform from '../backform.pgadmin';
|
import Backform from '../backform.pgadmin';
|
||||||
import {getTreeNodeHierarchyFromIdentifier} from '../tree/pgadmin_tree_node';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class can be extended to create new dialog boxes.
|
* This class can be extended to create new dialog boxes.
|
||||||
@ -35,8 +34,8 @@ export class Dialog {
|
|||||||
|
|
||||||
retrieveAncestorOfTypeServer(item) {
|
retrieveAncestorOfTypeServer(item) {
|
||||||
let serverInformation = null;
|
let serverInformation = null;
|
||||||
let aciTreeItem = item || this.pgBrowser.treeMenu.selected();
|
let aciTreeItem = item || this.pgBrowser.tree.selected();
|
||||||
let treeNode = this.pgBrowser.treeMenu.findNodeByDomElement(aciTreeItem);
|
let treeNode = this.pgBrowser.tree.findNodeByDomElement(aciTreeItem);
|
||||||
|
|
||||||
if (treeNode) {
|
if (treeNode) {
|
||||||
let nodeData;
|
let nodeData;
|
||||||
@ -107,7 +106,7 @@ export class Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
canExecuteOnCurrentDatabase(aciTreeItem) {
|
canExecuteOnCurrentDatabase(aciTreeItem) {
|
||||||
const treeInfo = getTreeNodeHierarchyFromIdentifier.apply(this.pgBrowser, [aciTreeItem]);
|
const treeInfo = this.pgBrowser.tree.getTreeNodeHierarchy(aciTreeItem);
|
||||||
|
|
||||||
if (treeInfo.database && treeInfo.database._label.indexOf('=') >= 0) {
|
if (treeInfo.database && treeInfo.database._label.indexOf('=') >= 0) {
|
||||||
this.alertify.alert(
|
this.alertify.alert(
|
||||||
|
@ -7,9 +7,9 @@
|
|||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
export function nodeHasStatistics(node, item) {
|
export function nodeHasStatistics(pgBrowser, node, item) {
|
||||||
if(typeof(node.hasStatistics) === 'function') {
|
if(typeof(node.hasStatistics) === 'function') {
|
||||||
const treeHierarchy = node.getTreeNodeHierarchy(item);
|
const treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
return node.hasStatistics(treeHierarchy);
|
return node.hasStatistics(treeHierarchy);
|
||||||
}
|
}
|
||||||
return node.hasStatistics;
|
return node.hasStatistics;
|
||||||
|
@ -12,7 +12,7 @@ import pgBrowser from 'pgadmin.browser';
|
|||||||
|
|
||||||
|
|
||||||
export function url(itemData, item, treeHierarchy) {
|
export function url(itemData, item, treeHierarchy) {
|
||||||
let treeNode = pgBrowser.treeMenu.findNodeByDomElement(item);
|
let treeNode = pgBrowser.tree.findNodeByDomElement(item);
|
||||||
let return_url = null;
|
let return_url = null;
|
||||||
|
|
||||||
if (treeNode) {
|
if (treeNode) {
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import {isValidTreeNodeData} from 'sources/tree/tree';
|
import {isValidTreeNodeData} from 'sources/tree/tree';
|
||||||
|
import pgAdmin from 'sources/pgadmin';
|
||||||
|
|
||||||
function checkAllowConnIfDatabaseNode(treeNodeData) {
|
function checkAllowConnIfDatabaseNode(treeNodeData) {
|
||||||
return (treeNodeData._type === 'database' && treeNodeData.allowConn)
|
return (treeNodeData._type === 'database' && treeNodeData.allowConn)
|
||||||
@ -24,7 +25,8 @@ export function enabled(tree, supportedNodes, treeNodeData, domTreeNode) {
|
|||||||
if (!isValidTreeNodeData(treeNodeData))
|
if (!isValidTreeNodeData(treeNodeData))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
let treeNode = tree.findNodeByDomElement(domTreeNode);
|
let _tree = tree ? tree : pgAdmin.Browser.tree;
|
||||||
|
let treeNode = _tree.findNodeByDomElement(domTreeNode);
|
||||||
if (!treeNode) {
|
if (!treeNode) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1,75 +0,0 @@
|
|||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// pgAdmin 4 - PostgreSQL Tools
|
|
||||||
//
|
|
||||||
// Copyright (C) 2013 - 2021, The pgAdmin Development Team
|
|
||||||
// This software is released under the PostgreSQL Licence
|
|
||||||
//
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method received pgBrowser and new TreeNode object
|
|
||||||
*
|
|
||||||
* This method retrieves all the data that exists in the tree node and in
|
|
||||||
* `pgBrowser.Nodes` for all the parent node of the provided node.
|
|
||||||
*
|
|
||||||
* The 2 condition to get the information from pgBrowser.Nodes are:
|
|
||||||
* 1 - the variable _type of the tree node
|
|
||||||
* 2 - the presence of hasId in the pgBrowser.Nodes for the specific node
|
|
||||||
*
|
|
||||||
* Number 2 is used to ignore coll-* nodes as they do not add any useful
|
|
||||||
* information
|
|
||||||
*/
|
|
||||||
export function getTreeNodeHierarchyFromElement(pgBrowser, treeNode) {
|
|
||||||
return getTreeNodeHierarchy.call(pgBrowser, treeNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method received an ACI Tree JQuery node
|
|
||||||
*
|
|
||||||
* NOTE: this function need to be called on pgBrowser instance.
|
|
||||||
* getTreeNodeHierarchyFromIdentifier.apply(pgBrowser, [aciTreeNodeIdentifier])
|
|
||||||
*
|
|
||||||
* This method retrieves all the data that exists in the tree node and in
|
|
||||||
* `pgBrowser.Nodes` for all the parent node of the provided node.
|
|
||||||
*
|
|
||||||
* The 2 condition to get the information from pgBrowser.Nodes are:
|
|
||||||
* 1 - the variable _type of the tree node
|
|
||||||
* 2 - the presence of hasId in the pgBrowser.Nodes for the specific node
|
|
||||||
*
|
|
||||||
* Number 2 is used to ignore coll-* nodes as they do not add any useful
|
|
||||||
* information
|
|
||||||
*/
|
|
||||||
export function getTreeNodeHierarchyFromIdentifier(aciTreeNodeIdentifier) {
|
|
||||||
let identifier = this.treeMenu.translateTreeNodeIdFromACITree(aciTreeNodeIdentifier);
|
|
||||||
let currentNode = this.treeMenu.findNode(identifier);
|
|
||||||
if (currentNode === null) return null;
|
|
||||||
return getTreeNodeHierarchy.call(this, currentNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getTreeNodeHierarchy(currentNode) {
|
|
||||||
let idx = 0;
|
|
||||||
let node_cnt = 0;
|
|
||||||
let result = {};
|
|
||||||
|
|
||||||
do {
|
|
||||||
const currentNodeData = currentNode.getData();
|
|
||||||
if (currentNodeData._type in this.Nodes && this.Nodes[currentNodeData._type].hasId) {
|
|
||||||
const nodeType = mapType(currentNodeData._type, node_cnt);
|
|
||||||
if (result[nodeType] === undefined) {
|
|
||||||
result[nodeType] = _.extend({}, currentNodeData, {
|
|
||||||
'priority': idx,
|
|
||||||
});
|
|
||||||
idx -= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
node_cnt += 1;
|
|
||||||
currentNode = currentNode.hasParent() ? currentNode.parent() : null;
|
|
||||||
} while (currentNode);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function mapType(type, idx) {
|
|
||||||
return (type === 'partition' && idx > 0) ? 'table' : type;
|
|
||||||
}
|
|
@ -150,12 +150,10 @@ _.extend(pgBrowser.browserTreeState, {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
update_cache: function(item) {
|
update_cache: function(item) {
|
||||||
|
|
||||||
let data = item && pgBrowser.tree.itemData(item),
|
let data = item && pgBrowser.tree.itemData(item),
|
||||||
node = data && pgBrowser.Nodes[data._type],
|
treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
treeHierarchy = node.getTreeNodeHierarchy(item),
|
|
||||||
topParent = undefined,
|
topParent = undefined,
|
||||||
pathIDs = pgBrowser.tree.pathId(item),
|
pathIDs = pgBrowser.tree.pathId(pgBrowser.tree.parent(item)),
|
||||||
oldPath = pathIDs.join(),
|
oldPath = pathIDs.join(),
|
||||||
path = [],
|
path = [],
|
||||||
tmpIndex = -1;
|
tmpIndex = -1;
|
||||||
@ -208,8 +206,7 @@ _.extend(pgBrowser.browserTreeState, {
|
|||||||
let self= this,
|
let self= this,
|
||||||
treeData = self.stored_state || {},
|
treeData = self.stored_state || {},
|
||||||
data = item && pgBrowser.tree.itemData(item),
|
data = item && pgBrowser.tree.itemData(item),
|
||||||
node = data && pgBrowser.Nodes[data._type],
|
treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
treeHierarchy = node && node.getTreeNodeHierarchy(item);
|
|
||||||
|
|
||||||
if (treeHierarchy === null || !pgBrowser.tree.hasParent(item) || !(treeHierarchy.hasOwnProperty(self.parent)))
|
if (treeHierarchy === null || !pgBrowser.tree.hasParent(item) || !(treeHierarchy.hasOwnProperty(self.parent)))
|
||||||
return;
|
return;
|
||||||
@ -265,8 +262,7 @@ _.extend(pgBrowser.browserTreeState, {
|
|||||||
let self = this,
|
let self = this,
|
||||||
treeData = self.stored_state || {},
|
treeData = self.stored_state || {},
|
||||||
data = item && pgBrowser.tree.itemData(item),
|
data = item && pgBrowser.tree.itemData(item),
|
||||||
node = data && pgBrowser.Nodes[data._type],
|
treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
treeHierarchy = node && node.getTreeNodeHierarchy(item);
|
|
||||||
|
|
||||||
|
|
||||||
if (treeHierarchy === null || !pgBrowser.tree.hasParent(item) || !(treeHierarchy.hasOwnProperty(self.parent)))
|
if (treeHierarchy === null || !pgBrowser.tree.hasParent(item) || !(treeHierarchy.hasOwnProperty(self.parent)))
|
||||||
@ -305,7 +301,7 @@ _.extend(pgBrowser.browserTreeState, {
|
|||||||
|
|
||||||
let index = tmpItemData.indexOf(data.id);
|
let index = tmpItemData.indexOf(data.id);
|
||||||
|
|
||||||
pgBrowser.tree.toggle(item);
|
pgBrowser.tree.open(item);
|
||||||
|
|
||||||
if (index == (tmpItemData.length - 1 )) {
|
if (index == (tmpItemData.length - 1 )) {
|
||||||
let tIndex = treeData[treeHierarchy[self.parent]['_id']]['paths'].indexOf(tData);
|
let tIndex = treeData[treeHierarchy[self.parent]['_id']]['paths'].indexOf(tData);
|
||||||
@ -322,8 +318,7 @@ _.extend(pgBrowser.browserTreeState, {
|
|||||||
},
|
},
|
||||||
update_database_status: function(item) {
|
update_database_status: function(item) {
|
||||||
let data = item && pgBrowser.tree.itemData(item),
|
let data = item && pgBrowser.tree.itemData(item),
|
||||||
node = data && pgBrowser.Nodes[data._type],
|
treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
treeHierarchy = node.getTreeNodeHierarchy(item);
|
|
||||||
|
|
||||||
if (treeHierarchy.hasOwnProperty('database')) {
|
if (treeHierarchy.hasOwnProperty('database')) {
|
||||||
let databaseItem = treeHierarchy['database']['id'],
|
let databaseItem = treeHierarchy['database']['id'],
|
||||||
@ -374,8 +369,7 @@ _.extend(pgBrowser.browserTreeState, {
|
|||||||
select_tree_item(item) {
|
select_tree_item(item) {
|
||||||
let treeData = this.stored_state || {},
|
let treeData = this.stored_state || {},
|
||||||
data = item && pgBrowser.tree.itemData(item),
|
data = item && pgBrowser.tree.itemData(item),
|
||||||
node = data && pgBrowser.Nodes[data._type],
|
treeHierarchy = pgBrowser.tree.getTreeNodeHierarchy(item),
|
||||||
treeHierarchy = node && node.getTreeNodeHierarchy(item),
|
|
||||||
tmpTreeData = treeData[treeHierarchy[this.parent]['_id']];
|
tmpTreeData = treeData[treeHierarchy[this.parent]['_id']];
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,132 +7,408 @@
|
|||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import {isValidData} from 'sources/utils';
|
import _ from 'lodash';
|
||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
import Alertify from 'pgadmin.alertifyjs';
|
import pgAdmin from 'sources/pgadmin';
|
||||||
|
|
||||||
export class TreeNode {
|
import { FileType } from 'react-aspen';
|
||||||
constructor(id, data, domNode, parent) {
|
import { TreeNode } from './tree_nodes';
|
||||||
this.id = id;
|
|
||||||
this.data = data;
|
import {isValidData} from 'sources/utils';
|
||||||
this.setParent(parent);
|
|
||||||
this.children = [];
|
function manageTreeEvents(event, eventName, item) {
|
||||||
this.domNode = domNode;
|
let d = item ? item._metadata.data: [];
|
||||||
|
let node;
|
||||||
|
let obj = pgAdmin.Browser;
|
||||||
|
|
||||||
|
if (d && obj.Nodes[d._type]) {
|
||||||
|
node = obj.Nodes[d._type];
|
||||||
|
|
||||||
|
// If the Browser tree is not initialised yet
|
||||||
|
if (obj.tree === null) return;
|
||||||
|
|
||||||
|
if (eventName == 'dragstart') {
|
||||||
|
obj.tree.handleDraggable(event, item);
|
||||||
|
}
|
||||||
|
if (eventName == 'added' || eventName == 'beforeopen' || eventName == 'loaded') {
|
||||||
|
obj.tree.addNewNode(item.getMetadata('data').id, item.getMetadata('data') ,item), item.parent.path;
|
||||||
|
}
|
||||||
|
if (_.isObject(node.callbacks) &&
|
||||||
|
eventName in node.callbacks &&
|
||||||
|
typeof node.callbacks[eventName] == 'function' &&
|
||||||
|
!node.callbacks[eventName].apply(
|
||||||
|
node, [item, d, obj, [], eventName])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/* Raise tree events for the nodes */
|
||||||
|
try {
|
||||||
|
node.trigger(
|
||||||
|
'browser-node.' + eventName, node, item, d
|
||||||
|
);
|
||||||
|
obj.Events.trigger(
|
||||||
|
'pgadmin-browser:tree:' + eventName, item, d, node
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
console.warn(e.stack || e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export class Tree {
|
||||||
|
constructor(tree, manageTree, pgBrowser) {
|
||||||
|
this.tree = tree;
|
||||||
|
this.tree.onTreeEvents(manageTreeEvents);
|
||||||
|
|
||||||
|
this.rootNode = manageTree.tempTree;
|
||||||
|
this.Nodes = pgBrowser ? pgBrowser.Nodes : pgAdmin.Browser.Nodes;
|
||||||
|
|
||||||
|
this.draggableTypes = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
hasParent() {
|
async refresh(item) {
|
||||||
return this.parentNode !== null && this.parentNode !== undefined;
|
await this.tree.refresh(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
parent() {
|
async add(item, data) {
|
||||||
return this.parentNode;
|
await this.tree.create(item.parent, data.itemData);
|
||||||
}
|
}
|
||||||
|
|
||||||
setParent(parent) {
|
async before(item, data) {
|
||||||
this.parentNode = parent;
|
await this.tree.create(item.parent, data.itemData);
|
||||||
this.path = this.id;
|
}
|
||||||
if (parent !== null && parent !== undefined && parent.path !== undefined) {
|
|
||||||
this.path = parent.path + '.' + this.id;
|
async update(item, data) {
|
||||||
|
await this.tree.update(item, data.itemData);
|
||||||
|
}
|
||||||
|
|
||||||
|
async remove(item) {
|
||||||
|
return await this.tree.remove(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
async append(item, data) {
|
||||||
|
return await this.tree.create(item, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
next(item) {
|
||||||
|
if(item) {
|
||||||
|
let parent = this.parent(item);
|
||||||
|
if(parent && parent.children.length > 0) {
|
||||||
|
let idx = parent.children.indexOf(item);
|
||||||
|
if(idx !== -1 && parent.children.length !== idx+1) {
|
||||||
|
return parent.children[idx+1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
prev(item) {
|
||||||
|
if(item) {
|
||||||
|
let parent = this.parent(item);
|
||||||
|
if(parent && parent.children.length > 0) {
|
||||||
|
let idx = parent.children.indexOf(item);
|
||||||
|
if(idx !== -1 && idx !== 0) {
|
||||||
|
return parent.children[idx-1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
async open(item) {
|
||||||
|
if (this.isOpen(item)) { return true; }
|
||||||
|
await this.tree.toggleDirectory(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
async ensureVisible(item){
|
||||||
|
await this.tree.ensureVisible(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
async openPath(item) {
|
||||||
|
parent = item.parent;
|
||||||
|
await this.tree.openDirectory(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
async close(item) {
|
||||||
|
await this.tree.closeDirectory(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
async toggle(item) {
|
||||||
|
await this.tree.toggleDirectory(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
async select(item) {
|
||||||
|
await this.tree.setActiveFile(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
async selectNode(item) {
|
||||||
|
this.tree.setActiveFile(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
async unload(item) {
|
||||||
|
await this.tree.unload(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
async addIcon(item, icon) {
|
||||||
|
if (item !== undefined && item.getMetadata('data') !== undefined) {
|
||||||
|
item.getMetadata('data').icon = icon.icon;
|
||||||
|
}
|
||||||
|
await this.tree.addIcon(item, icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
removeIcon() {
|
||||||
|
// TBD
|
||||||
|
}
|
||||||
|
|
||||||
|
setLeaf() {
|
||||||
|
// TBD
|
||||||
|
}
|
||||||
|
async setLabel(item, label) {
|
||||||
|
if(item) {
|
||||||
|
await this.tree.setLabel(item, label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getData() {
|
async setInode(item) {
|
||||||
if (this.data === undefined) {
|
if(item._children) item._children = null;
|
||||||
return undefined;
|
await this.tree.closeDirectory(item);
|
||||||
} else if (this.data === null) {
|
}
|
||||||
return null;
|
|
||||||
|
deselect(item) {
|
||||||
|
this.tree.deSelectActiveFile(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
wasInit() {
|
||||||
|
// TBD
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wasLoad(item) {
|
||||||
|
if (item && item.type === FileType.Directory) {
|
||||||
|
return item.isExpanded;
|
||||||
}
|
}
|
||||||
return Object.assign({}, this.data);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
getHtmlIdentifier() {
|
parent(item) {
|
||||||
return this.domNode;
|
return item.parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
reload(tree) {
|
first(item) {
|
||||||
return new Promise((resolve)=>{
|
const model = this.tree.getModel();
|
||||||
this.unload(tree)
|
if (item === undefined || item === null) {
|
||||||
.then(()=>{
|
return model.root.children[0];
|
||||||
tree.aciTreeApi.setInode(this.domNode);
|
}
|
||||||
tree.aciTreeApi.deselect(this.domNode);
|
|
||||||
setTimeout(() => {
|
|
||||||
tree.selectNode(this.domNode);
|
|
||||||
}, 0);
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
unload(tree) {
|
if (item.branchSize > 0) {
|
||||||
return new Promise((resolve, reject)=>{
|
return item.children[0];
|
||||||
this.children = [];
|
|
||||||
tree.aciTreeApi.unload(this.domNode, {
|
|
||||||
success: ()=>{
|
|
||||||
resolve(true);
|
|
||||||
},
|
|
||||||
fail: ()=>{
|
|
||||||
reject();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
open(tree, suppressNoDom) {
|
|
||||||
return new Promise((resolve, reject)=>{
|
|
||||||
if(suppressNoDom && (this.domNode == null || typeof(this.domNode) === 'undefined')) {
|
|
||||||
resolve(true);
|
|
||||||
} else if(tree.aciTreeApi.isOpen(this.domNode)) {
|
|
||||||
resolve(true);
|
|
||||||
} else {
|
|
||||||
tree.aciTreeApi.open(this.domNode, {
|
|
||||||
success: ()=>{
|
|
||||||
resolve(true);
|
|
||||||
},
|
|
||||||
fail: ()=>{
|
|
||||||
reject(true);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Find the ancestor with matches this condition
|
|
||||||
*/
|
|
||||||
ancestorNode(condition) {
|
|
||||||
let node = this;
|
|
||||||
|
|
||||||
while (node.hasParent()) {
|
|
||||||
node = node.parent();
|
|
||||||
if (condition(node)) {
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
children(item) {
|
||||||
* Given a condition returns true if the current node
|
const model = this.tree.getModel();
|
||||||
* or any of the parent nodes condition result is true
|
return item ? (item.children !== null ? item.children : []) : model.root.children;
|
||||||
*/
|
}
|
||||||
anyFamilyMember(condition) {
|
|
||||||
if(condition(this)) {
|
itemFrom(domElem) {
|
||||||
return true;
|
return this.tree.getItemFromDOM(domElem[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
path(item) {
|
||||||
|
if (item) return item.path;
|
||||||
|
}
|
||||||
|
|
||||||
|
pathId(item) {
|
||||||
|
if (item) {
|
||||||
|
let pathIds = item.path.split('/');
|
||||||
|
pathIds.splice(0, 1);
|
||||||
|
return pathIds;
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
itemFromDOM(domElem) {
|
||||||
|
return this.tree.getItemFromDOM(domElem[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
siblings(item) {
|
||||||
|
if (this.hasParent(item)) {
|
||||||
|
let _siblings = this.parent(item).children.filter((_item) => _item.path !== item.path);
|
||||||
|
if (typeof(_siblings) !== 'object') return [_siblings];
|
||||||
|
else _siblings;
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
hasParent(item) {
|
||||||
|
return item && item.parent ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
isOpen(item) {
|
||||||
|
if (item.type === FileType.Directory) {
|
||||||
|
return item.isExpanded;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
isClosed(item) {
|
||||||
|
if (item.type === FileType.Directory) {
|
||||||
|
return !item.isExpanded;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
itemData(item) {
|
||||||
|
return (item !== undefined && item.getMetadata('data') !== undefined) ? item._metadata.data : [];
|
||||||
|
}
|
||||||
|
|
||||||
|
getData(item) {
|
||||||
|
return (item !== undefined && item.getMetadata('data') !== undefined) ? item._metadata.data : [];
|
||||||
|
}
|
||||||
|
|
||||||
|
isInode(item) {
|
||||||
|
const children = this.children(item);
|
||||||
|
if (children === null || children === undefined) return false;
|
||||||
|
return children.length > 0 ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
selected() {
|
||||||
|
return this.tree.getActiveFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
findNodeWithToggle(path) {
|
||||||
|
let tree = this;
|
||||||
|
|
||||||
|
if(path == null || !Array.isArray(path)) {
|
||||||
|
return Promise.reject();
|
||||||
|
}
|
||||||
|
path = '/browser/' + path.join('/');
|
||||||
|
|
||||||
|
let onCorrectPath = function(matchPath) {
|
||||||
|
return (matchPath !== undefined && path !== undefined
|
||||||
|
&& (path.startsWith(matchPath) || path === matchPath));
|
||||||
|
};
|
||||||
|
|
||||||
|
return (function findInNode(currentNode) {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
if (path === null || path === undefined || path.length === 0) {
|
||||||
|
resolve(null);
|
||||||
|
}
|
||||||
|
/* No point in checking the children if
|
||||||
|
* the path for currentNode itself is not matching
|
||||||
|
*/
|
||||||
|
if (currentNode.path !== undefined && !onCorrectPath(currentNode.path)) {
|
||||||
|
reject(null);
|
||||||
|
} else if (currentNode.path === path) {
|
||||||
|
resolve(currentNode);
|
||||||
|
} else {
|
||||||
|
tree.open(currentNode)
|
||||||
|
.then(()=>{
|
||||||
|
let children = currentNode.children;
|
||||||
|
for (let i = 0, length = children.length; i < length; i++) {
|
||||||
|
let childNode = children[i];
|
||||||
|
if(onCorrectPath(childNode.path)) {
|
||||||
|
resolve(findInNode(childNode));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reject(null);
|
||||||
|
})
|
||||||
|
.catch(()=>{
|
||||||
|
reject(null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})(tree.tree.getModel().root);
|
||||||
|
}
|
||||||
|
|
||||||
|
findNodeByDomElement(domElement) {
|
||||||
|
const path = domElement.path;
|
||||||
|
if(!path || !path[0]) {
|
||||||
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.ancestorNode(condition) !== null;
|
return this.findNode(path);
|
||||||
}
|
}
|
||||||
anyParent(condition) {
|
|
||||||
return this.ancestorNode(condition) !== null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class Tree {
|
addNewNode(id, data, item, parentPath) {
|
||||||
constructor() {
|
let parent;
|
||||||
this.rootNode = new TreeNode(undefined, {});
|
parent = this.findNode(parentPath);
|
||||||
this.aciTreeApi = undefined;
|
return this.createOrUpdateNode(id, data, parent, item);
|
||||||
this.draggableTypes = {};
|
}
|
||||||
|
|
||||||
|
findNode(path) {
|
||||||
|
if (path === null || path === undefined || path.length === 0) {
|
||||||
|
return this.rootNode;
|
||||||
|
}
|
||||||
|
return findInTree(this.rootNode, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
createOrUpdateNode(id, data, parent, domNode) {
|
||||||
|
let oldNodePath = id;
|
||||||
|
if(parent !== null && parent !== undefined && parent.path !== undefined && parent.path != '/browser') {
|
||||||
|
oldNodePath = parent.path + '/' + id;
|
||||||
|
}
|
||||||
|
const oldNode = this.findNode(oldNodePath);
|
||||||
|
if (oldNode !== null) {
|
||||||
|
oldNode.data = data;
|
||||||
|
oldNode.domNode = domNode;
|
||||||
|
return oldNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
const node = new TreeNode(id, data, domNode, parent);
|
||||||
|
if (parent === this.rootNode) {
|
||||||
|
node.parentNode = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parent !== null && parent !== undefined)
|
||||||
|
parent.children.push(node);
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
translateTreeNodeIdFromReactTree(aciTreeNode) {
|
||||||
|
let currentTreeNode = aciTreeNode;
|
||||||
|
let path = [];
|
||||||
|
while (currentTreeNode !== null && currentTreeNode !== undefined) {
|
||||||
|
if (currentTreeNode.path !== '/browser') path.unshift(currentTreeNode.path);
|
||||||
|
if (this.hasParent(currentTreeNode)) {
|
||||||
|
currentTreeNode = this.parent(currentTreeNode);
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
getTreeNodeHierarchy(identifier) {
|
||||||
|
let idx = 0;
|
||||||
|
let node_cnt = 0;
|
||||||
|
let result = {};
|
||||||
|
if (identifier === undefined) return;
|
||||||
|
let item = TreeNode.prototype.isPrototypeOf(identifier) ? identifier : this.findNode(identifier.path);
|
||||||
|
if (item === undefined) return;
|
||||||
|
do {
|
||||||
|
const currentNodeData = item.getData();
|
||||||
|
if (currentNodeData._type in this.Nodes && this.Nodes[currentNodeData._type].hasId) {
|
||||||
|
const nodeType = mapType(currentNodeData._type, node_cnt);
|
||||||
|
if (result[nodeType] === undefined) {
|
||||||
|
result[nodeType] = _.extend({}, currentNodeData, {
|
||||||
|
'priority': idx,
|
||||||
|
});
|
||||||
|
idx -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
node_cnt += 1;
|
||||||
|
item = item.hasParent() ? item.parent() : null;
|
||||||
|
} while (item);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -164,7 +440,8 @@ export class Tree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
prepareDraggable(data, item) {
|
handleDraggable(e, item) {
|
||||||
|
let data = item.getMetadata('data');
|
||||||
let dropDetailsFunc = this.getDraggable(data._type);
|
let dropDetailsFunc = this.getDraggable(data._type);
|
||||||
|
|
||||||
if(dropDetailsFunc != null) {
|
if(dropDetailsFunc != null) {
|
||||||
@ -173,265 +450,67 @@ export class Tree {
|
|||||||
* overrides the dragstart event set using element.on('dragstart')
|
* overrides the dragstart event set using element.on('dragstart')
|
||||||
* This will avoid conflict.
|
* This will avoid conflict.
|
||||||
*/
|
*/
|
||||||
item.find('.aciTreeItem')
|
let dropDetails = dropDetailsFunc(data, item);
|
||||||
.attr('draggable', true)[0]
|
|
||||||
.addEventListener('dragstart', (e)=> {
|
|
||||||
let dropDetails = dropDetailsFunc(data, item);
|
|
||||||
|
|
||||||
if(typeof dropDetails == 'string') {
|
if(typeof dropDetails == 'string') {
|
||||||
dropDetails = {
|
dropDetails = {
|
||||||
text:dropDetails,
|
text:dropDetails,
|
||||||
cur:{
|
cur:{
|
||||||
from:dropDetails.length,
|
from:dropDetails.length,
|
||||||
to: dropDetails.length,
|
to: dropDetails.length,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
} else {
|
|
||||||
if(!dropDetails.cur) {
|
|
||||||
dropDetails = {
|
|
||||||
...dropDetails,
|
|
||||||
cur:{
|
|
||||||
from:dropDetails.text.length,
|
|
||||||
to: dropDetails.text.length,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
e.dataTransfer.setData('text', JSON.stringify(dropDetails));
|
|
||||||
/* Required by Firefox */
|
|
||||||
if(e.dataTransfer.dropEffect) {
|
|
||||||
e.dataTransfer.dropEffect = 'move';
|
|
||||||
}
|
|
||||||
|
|
||||||
/* setDragImage is not supported in IE. We leave it to
|
|
||||||
* its default look and feel
|
|
||||||
*/
|
|
||||||
if(e.dataTransfer.setDragImage) {
|
|
||||||
let dragItem = $(`
|
|
||||||
<div class="drag-tree-node">
|
|
||||||
<span>${_.escape(dropDetails.text)}</span>
|
|
||||||
</div>`
|
|
||||||
);
|
|
||||||
|
|
||||||
$('body .drag-tree-node').remove();
|
|
||||||
$('body').append(dragItem);
|
|
||||||
|
|
||||||
e.dataTransfer.setDragImage(dragItem[0], 0, 0);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addNewNode(id, data, domNode, parentPath) {
|
|
||||||
const parent = this.findNode(parentPath);
|
|
||||||
return this.createOrUpdateNode(id, data, parent, domNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
findNode(path) {
|
|
||||||
if (path === null || path === undefined || path.length === 0) {
|
|
||||||
return this.rootNode;
|
|
||||||
}
|
|
||||||
return findInTree(this.rootNode, path.join('.'));
|
|
||||||
}
|
|
||||||
|
|
||||||
findNodeWithToggle(path) {
|
|
||||||
let tree = this;
|
|
||||||
|
|
||||||
if(path == null || !Array.isArray(path)) {
|
|
||||||
return Promise.reject();
|
|
||||||
}
|
|
||||||
path = path.join('.');
|
|
||||||
|
|
||||||
let onCorrectPath = function(matchPath) {
|
|
||||||
return (matchPath !== undefined && path !== undefined
|
|
||||||
&& (path.startsWith(matchPath + '.') || path === matchPath));
|
|
||||||
};
|
|
||||||
|
|
||||||
return (function findInNode(currentNode) {
|
|
||||||
return new Promise((resolve, reject)=>{
|
|
||||||
if (path === null || path === undefined || path.length === 0) {
|
|
||||||
resolve(null);
|
|
||||||
}
|
|
||||||
/* No point in checking the children if
|
|
||||||
* the path for currentNode itself is not matching
|
|
||||||
*/
|
|
||||||
if (currentNode.path !== undefined && !onCorrectPath(currentNode.path)) {
|
|
||||||
reject(null);
|
|
||||||
} else if (currentNode.path === path) {
|
|
||||||
resolve(currentNode);
|
|
||||||
} else {
|
|
||||||
currentNode.open(tree, true)
|
|
||||||
.then(()=>{
|
|
||||||
for (let i = 0, length = currentNode.children.length; i < length; i++) {
|
|
||||||
let childNode = currentNode.children[i];
|
|
||||||
if(onCorrectPath(childNode.path)) {
|
|
||||||
resolve(findInNode(childNode));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
reject(null);
|
|
||||||
})
|
|
||||||
.catch(()=>{
|
|
||||||
reject(null);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})(this.rootNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
findNodeByDomElement(domElement) {
|
|
||||||
const path = this.translateTreeNodeIdFromACITree(domElement);
|
|
||||||
if(!path || !path[0]) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.findNode(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
selected() {
|
|
||||||
return this.aciTreeApi.selected();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* scrollIntoView will scroll only to top and bottom
|
|
||||||
* Logic can be added for scroll to middle
|
|
||||||
*/
|
|
||||||
scrollTo(domElement) {
|
|
||||||
domElement.scrollIntoView();
|
|
||||||
}
|
|
||||||
|
|
||||||
selectNode(aciTreeIdentifier, scrollOnSelect) {
|
|
||||||
this.aciTreeApi.select(aciTreeIdentifier);
|
|
||||||
|
|
||||||
if(scrollOnSelect) {
|
|
||||||
this.scrollTo(aciTreeIdentifier[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
createOrUpdateNode(id, data, parent, domNode) {
|
|
||||||
let oldNodePath = [id];
|
|
||||||
if(parent !== null && parent !== undefined) {
|
|
||||||
oldNodePath = [parent.path, id];
|
|
||||||
}
|
|
||||||
const oldNode = this.findNode(oldNodePath);
|
|
||||||
if (oldNode !== null) {
|
|
||||||
oldNode.data = data;
|
|
||||||
oldNode.domNode = domNode;
|
|
||||||
return oldNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
const node = new TreeNode(id, data, domNode, parent);
|
|
||||||
if (parent === this.rootNode) {
|
|
||||||
node.parentNode = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parent !== null && parent !== undefined)
|
|
||||||
parent.children.push(node);
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
unloadNode(id, data, domNode, parentPath) {
|
|
||||||
let oldNodePath = [id];
|
|
||||||
const parent = this.findNode(parentPath);
|
|
||||||
if(parent !== null && parent !== undefined) {
|
|
||||||
oldNodePath = [parent.path, id];
|
|
||||||
}
|
|
||||||
const oldNode = this.findNode(oldNodePath);
|
|
||||||
if(oldNode) {
|
|
||||||
oldNode.children = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Given the JQuery object that contains the ACI Tree
|
|
||||||
* this method is responsible for registering this tree class
|
|
||||||
* to listen to all the events that happen in the ACI Tree.
|
|
||||||
*
|
|
||||||
* At this point in time the only event that we care about is
|
|
||||||
* the addition of a new node.
|
|
||||||
* The function will create a new tree node to store the information
|
|
||||||
* that exist in the ACI for it.
|
|
||||||
*/
|
|
||||||
register($treeJQuery) {
|
|
||||||
$treeJQuery.on('acitree', function (event, api, item, eventName) {
|
|
||||||
if (api.isItem(item)) {
|
|
||||||
/* If the id of node is changed, the path should also be changed */
|
|
||||||
if (['added', 'idset', 'beforeunload'].indexOf(eventName) != -1) {
|
|
||||||
const id = api.getId(item);
|
|
||||||
const data = api.itemData(item);
|
|
||||||
const parentId = this.translateTreeNodeIdFromACITree(api.parent(item));
|
|
||||||
|
|
||||||
if(eventName === 'beforeunload') {
|
|
||||||
this.unloadNode(id, data, item, parentId);
|
|
||||||
} else {
|
|
||||||
if(eventName === 'added') {
|
|
||||||
this.prepareDraggable(data, item);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.addNewNode(id, data, item, parentId);
|
|
||||||
}
|
|
||||||
if(data.errmsg) {
|
|
||||||
Alertify.error(data.errmsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.bind(this));
|
|
||||||
this.aciTreeApi = $treeJQuery.aciTree('api');
|
|
||||||
|
|
||||||
/* Ctrl + Click will trigger context menu. Select the node when Ctrl+Clicked.
|
|
||||||
* When the context menu is visible, the tree should lose focus
|
|
||||||
* to use context menu with keyboard. Otherwise, the tree functions
|
|
||||||
* overrides the keyboard events.
|
|
||||||
*/
|
|
||||||
let contextHandler = (ev)=>{
|
|
||||||
let treeItem = this.aciTreeApi.itemFrom(ev.target);
|
|
||||||
if(treeItem.length) {
|
|
||||||
if(ev.ctrlKey) {
|
|
||||||
this.aciTreeApi.select(treeItem);
|
|
||||||
}
|
|
||||||
$(treeItem).on('contextmenu:visible', ()=>{
|
|
||||||
$(treeItem).trigger('blur');
|
|
||||||
$(treeItem).off('contextmenu:visible');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
$treeJQuery
|
|
||||||
.off('mousedown', contextHandler)
|
|
||||||
.on('mousedown', contextHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* As the name hints this functions works as a layer in between ACI and
|
|
||||||
* the adaptor. Given a ACITree JQuery node find the location of it in the
|
|
||||||
* Tree and then returns and array with the path to the Tree Node in
|
|
||||||
* question
|
|
||||||
*
|
|
||||||
* This is not optimized and will always go through the full tree
|
|
||||||
*/
|
|
||||||
translateTreeNodeIdFromACITree(aciTreeNode) {
|
|
||||||
let currentTreeNode = aciTreeNode;
|
|
||||||
let path = [];
|
|
||||||
while (currentTreeNode !== null && currentTreeNode !== undefined && currentTreeNode.length > 0) {
|
|
||||||
path.unshift(this.aciTreeApi.getId(currentTreeNode));
|
|
||||||
if (this.aciTreeApi.hasParent(currentTreeNode)) {
|
|
||||||
currentTreeNode = this.aciTreeApi.parent(currentTreeNode);
|
|
||||||
} else {
|
} else {
|
||||||
break;
|
if(!dropDetails.cur) {
|
||||||
|
dropDetails = {
|
||||||
|
...dropDetails,
|
||||||
|
cur:{
|
||||||
|
from:dropDetails.text.length,
|
||||||
|
to: dropDetails.text.length,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
e.dataTransfer.setData('text', JSON.stringify(dropDetails));
|
||||||
|
/* Required by Firefox */
|
||||||
|
if(e.dataTransfer.dropEffect) {
|
||||||
|
e.dataTransfer.dropEffect = 'move';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* setDragImage is not supported in IE. We leave it to
|
||||||
|
* its default look and feel
|
||||||
|
*/
|
||||||
|
if(e.dataTransfer.setDragImage) {
|
||||||
|
let dragItem = $(`
|
||||||
|
<div class="drag-tree-node">
|
||||||
|
<span>${_.escape(dropDetails.text)}</span>
|
||||||
|
</div>`
|
||||||
|
);
|
||||||
|
|
||||||
|
$('body .drag-tree-node').remove();
|
||||||
|
$('body').append(dragItem);
|
||||||
|
|
||||||
|
e.dataTransfer.setDragImage(dragItem[0], 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return path;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function mapType(type, idx) {
|
||||||
|
return (type === 'partition' && idx > 0) ? 'table' : type;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given an initial node and a path, it will navigate through
|
* Given an initial node and a path, it will navigate through
|
||||||
* the new tree to find the node that matches the path
|
* the new tree to find the node that matches the path
|
||||||
*/
|
*/
|
||||||
function findInTree(rootNode, path) {
|
export function findInTree(rootNode, path) {
|
||||||
if (path === null) {
|
if (path === null) {
|
||||||
return rootNode;
|
return rootNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (function findInNode(currentNode) {
|
return (function findInNode(currentNode) {
|
||||||
|
|
||||||
/* No point in checking the children if
|
/* No point in checking the children if
|
||||||
|
87
web/pgadmin/static/js/tree/tree_init.tsx
Normal file
87
web/pgadmin/static/js/tree/tree_init.tsx
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
/////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// pgAdmin 4 - PostgreSQL Tools
|
||||||
|
//
|
||||||
|
// Copyright (C) 2013 - 2021, The pgAdmin Development Team
|
||||||
|
// This software is released under the PostgreSQL Licence
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
import * as React from 'react';
|
||||||
|
import { render } from 'react-dom';
|
||||||
|
import { FileTreeX, TreeModelX } from 'pgadmin4-tree';
|
||||||
|
import {Tree} from './tree';
|
||||||
|
|
||||||
|
import { IBasicFileSystemHost } from 'react-aspen';
|
||||||
|
import { ManageTreeNodes } from './tree_nodes'
|
||||||
|
|
||||||
|
var initBrowserTree = async (pgBrowser) => {
|
||||||
|
const MOUNT_POINT = '/browser'
|
||||||
|
|
||||||
|
// Setup host
|
||||||
|
let mtree = new ManageTreeNodes();
|
||||||
|
|
||||||
|
// Init Tree with the Tree Parent node '/browser'
|
||||||
|
mtree.init(MOUNT_POINT);
|
||||||
|
|
||||||
|
const host: IBasicFileSystemHost = {
|
||||||
|
pathStyle: 'unix',
|
||||||
|
getItems: async (path) => {
|
||||||
|
let nodes = await mtree.readNode(path);
|
||||||
|
return nodes;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create Node
|
||||||
|
const create = async (parentPath, _data): Promise<IFileEntryItem> => {
|
||||||
|
try {
|
||||||
|
let _node_path = parentPath + "/" + _data.id
|
||||||
|
return mtree.addNode(parentPath, _node_path, _data)
|
||||||
|
} catch (error) {
|
||||||
|
return null // or throw error as you see fit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Remove Node
|
||||||
|
const remove = async (path: string, _removeOnlyChild): Promise<boolean> => {
|
||||||
|
try {
|
||||||
|
await mtree.removeNode(path, _removeOnlyChild);
|
||||||
|
return true
|
||||||
|
} catch (error) {
|
||||||
|
return false // or throw error as you see fit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update Node
|
||||||
|
const update = async (path: string, data): Promise<boolean> => {
|
||||||
|
try {
|
||||||
|
await mtree.updateNode(path, data);
|
||||||
|
return true
|
||||||
|
} catch (error) {
|
||||||
|
return false // or throw error as you see fit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const treeModelX = new TreeModelX(host, MOUNT_POINT)
|
||||||
|
|
||||||
|
const itemHandle = function onReady(handler) {
|
||||||
|
// Initialize pgBrowser Tree
|
||||||
|
pgBrowser.tree = new Tree(handler, mtree, pgBrowser);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
await treeModelX.root.ensureLoaded()
|
||||||
|
|
||||||
|
// Render Browser Tree
|
||||||
|
await render(
|
||||||
|
<div>
|
||||||
|
<FileTreeX height={999} width={'100%'} model={treeModelX}
|
||||||
|
onReady={itemHandle} create={create} remove={remove} update={update}/>
|
||||||
|
</div>, document.getElementById('tree'));
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
initBrowserTree: initBrowserTree,
|
||||||
|
};
|
||||||
|
|
298
web/pgadmin/static/js/tree/tree_nodes.ts
Normal file
298
web/pgadmin/static/js/tree/tree_nodes.ts
Normal file
@ -0,0 +1,298 @@
|
|||||||
|
/////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// pgAdmin 4 - PostgreSQL Tools
|
||||||
|
//
|
||||||
|
// Copyright (C) 2013 - 2021, The pgAdmin Development Team
|
||||||
|
// This software is released under the PostgreSQL Licence
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
import * as BrowserFS from 'browserfs'
|
||||||
|
import url_for from 'sources/url_for';
|
||||||
|
import pgAdmin from 'sources/pgadmin';
|
||||||
|
import _ from 'underscore';
|
||||||
|
import { FileType } from 'react-aspen'
|
||||||
|
import { findInTree } from './tree';
|
||||||
|
|
||||||
|
import { dirname } from 'path-fx';
|
||||||
|
|
||||||
|
export class ManageTreeNodes {
|
||||||
|
constructor(fs) {
|
||||||
|
this.tree = {}
|
||||||
|
this.tempTree = new TreeNode(undefined, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
public init = (_root: string) => new Promise((res, rej) => {
|
||||||
|
let node = {parent: null, children: [], data: null};
|
||||||
|
this.tree = {};
|
||||||
|
this.tree[_root] = {name: 'root', type: FileType.Directory, metadata: node};
|
||||||
|
res();
|
||||||
|
})
|
||||||
|
|
||||||
|
public updateNode = (_path, _data) => new Promise((res, rej) => {
|
||||||
|
if (_path in this.tree) {
|
||||||
|
const item = this.tree[_path];
|
||||||
|
item.name = _data.label;
|
||||||
|
item.metadata.data = _data;
|
||||||
|
}
|
||||||
|
res(true);
|
||||||
|
})
|
||||||
|
|
||||||
|
public removeNode = async (_path, _removeOnlyChild) => {
|
||||||
|
const item = this.findNode(_path);
|
||||||
|
|
||||||
|
if (item && item.parentNode) {
|
||||||
|
item.children = [];
|
||||||
|
item.parentNode.children.splice(item.parentNode.children.indexOf(item), 1);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
findNode(path) {
|
||||||
|
if (path === null || path === undefined || path.length === 0 || path == '/browser') {
|
||||||
|
return this.tempTree;
|
||||||
|
}
|
||||||
|
return findInTree(this.tempTree, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public addNode = (_parent: string, _path: string, _data: []) => new Promise((res, rej) => {
|
||||||
|
_data.type = _data.inode ? FileType.Directory : FileType.File;
|
||||||
|
_data._label = _data.label;
|
||||||
|
_data.label = _.escape(_data.label);
|
||||||
|
|
||||||
|
_data.is_collection = isCollectionNode(_data._type);
|
||||||
|
let nodeData = {parent: _parent, children: [], data: _data};
|
||||||
|
|
||||||
|
let tmpParentNode = this.findNode(_parent);
|
||||||
|
let treeNode = new TreeNode(_data.id, _data, {}, tmpParentNode, nodeData, _data.type);
|
||||||
|
|
||||||
|
if (tmpParentNode !== null && tmpParentNode !== undefined) tmpParentNode.children.push(treeNode);
|
||||||
|
|
||||||
|
res(treeNode);
|
||||||
|
})
|
||||||
|
|
||||||
|
public readNode = (_path: string) => new Promise<string[]>((res, rej) => {
|
||||||
|
let temp_tree_path = _path;
|
||||||
|
let node = this.findNode(_path);
|
||||||
|
|
||||||
|
if (node && node.children.length > 0) {
|
||||||
|
if (!node.type === FileType.File) {
|
||||||
|
rej("It's a leaf node")
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (node.children.length != 0) res(node.children)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
async function loadData() {
|
||||||
|
let url = '';
|
||||||
|
if (_path == '/browser') {
|
||||||
|
url = url_for('browser.nodes');
|
||||||
|
} else {
|
||||||
|
let _parent_url = self.generate_url(_path);
|
||||||
|
if (node.metadata.data._pid == null ) {
|
||||||
|
url = node.metadata.data._type + '/children/' + node.metadata.data._id;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (node.metadata.data._type.includes("coll-")) {
|
||||||
|
let _type = node.metadata.data._type.replace("coll-", "")
|
||||||
|
url = _type + '/nodes/' + _parent_url;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
url = node.metadata.data._type + '/children/' + _parent_url + '/' + node.metadata.data._id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
temp_tree_path = node.path;
|
||||||
|
|
||||||
|
if (node.metadata.data._type == 'server' && !node.metadata.data.connected) {
|
||||||
|
url = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function jsonData(url) {
|
||||||
|
let res = await fetch(url, {
|
||||||
|
headers: {
|
||||||
|
'X-Requested-With': 'XMLHttpRequest',
|
||||||
|
'X-pgA-CSRFToken': pgAdmin.csrf_token
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (res.status == 200) {
|
||||||
|
try {
|
||||||
|
let json = await res.json();
|
||||||
|
return json.data;
|
||||||
|
} catch (e) {
|
||||||
|
console.warn(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new Error("Node Load Error...");
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
let treeData = null;
|
||||||
|
if (url) treeData = await jsonData(url);
|
||||||
|
|
||||||
|
const Path = BrowserFS.BFSRequire('path')
|
||||||
|
const fill = async (tree) => {
|
||||||
|
for (let idx in tree) {
|
||||||
|
const _node = tree[idx]
|
||||||
|
const _pathl = Path.join(_path, _node.id)
|
||||||
|
await self.addNode(temp_tree_path, _pathl, _node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let d = await fill(treeData);
|
||||||
|
if (node.children.length > 0) res(node.children);
|
||||||
|
else res(null);
|
||||||
|
|
||||||
|
}
|
||||||
|
loadData();
|
||||||
|
})
|
||||||
|
|
||||||
|
public generate_url = (path: string) => {
|
||||||
|
let _path = path;
|
||||||
|
let _parent_path = [];
|
||||||
|
while(_path != '/') {
|
||||||
|
let node = this.findNode(_path);
|
||||||
|
let _parent = dirname(_path);
|
||||||
|
if(node.parentNode && node.parentNode.path == _parent) {
|
||||||
|
if (node.parentNode.metadata.data !== null && !node.parentNode.metadata.data._type.includes('coll-'))
|
||||||
|
_parent_path.push(node.parentNode.metadata.data._id);
|
||||||
|
}
|
||||||
|
_path = _parent;
|
||||||
|
}
|
||||||
|
let _rev_arr = _parent_path.reverse();
|
||||||
|
return _rev_arr.join("/");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export class TreeNode {
|
||||||
|
constructor(id, data, domNode, parent, metadata, type) {
|
||||||
|
this.id = id;
|
||||||
|
this.data = data;
|
||||||
|
this.setParent(parent);
|
||||||
|
this.children = [];
|
||||||
|
this.domNode = domNode;
|
||||||
|
this.metadata = metadata;
|
||||||
|
this.name = metadata ? metadata.data.label : "";
|
||||||
|
this.type = type ? type : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
hasParent() {
|
||||||
|
return this.parentNode !== null && this.parentNode !== undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
parent() {
|
||||||
|
return this.parentNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
setParent(parent) {
|
||||||
|
this.parentNode = parent;
|
||||||
|
this.path = this.id;
|
||||||
|
if (this.id)
|
||||||
|
if (parent !== null && parent !== undefined && parent.path !== undefined) {
|
||||||
|
this.path = parent.path + '/' + this.id;
|
||||||
|
} else {
|
||||||
|
this.path = '/browser/' + this.id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getData() {
|
||||||
|
if (this.data === undefined) {
|
||||||
|
return undefined;
|
||||||
|
} else if (this.data === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return Object.assign({}, this.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
getHtmlIdentifier() {
|
||||||
|
return this.domNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Find the ancestor with matches this condition
|
||||||
|
*/
|
||||||
|
ancestorNode(condition) {
|
||||||
|
let node = this;
|
||||||
|
|
||||||
|
while (node.hasParent()) {
|
||||||
|
node = node.parent();
|
||||||
|
if (condition(node)) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a condition returns true if the current node
|
||||||
|
* or any of the parent nodes condition result is true
|
||||||
|
*/
|
||||||
|
anyFamilyMember(condition) {
|
||||||
|
if(condition(this)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.ancestorNode(condition) !== null;
|
||||||
|
}
|
||||||
|
anyParent(condition) {
|
||||||
|
return this.ancestorNode(condition) !== null;
|
||||||
|
}
|
||||||
|
|
||||||
|
reload(tree) {
|
||||||
|
return new Promise((resolve)=>{
|
||||||
|
this.unload(tree)
|
||||||
|
.then(()=>{
|
||||||
|
tree.setInode(this.domNode);
|
||||||
|
tree.deselect(this.domNode);
|
||||||
|
setTimeout(() => {
|
||||||
|
tree.selectNode(this.domNode);
|
||||||
|
}, 0);
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
unload(tree) {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
this.children = [];
|
||||||
|
tree.unload(this.domNode)
|
||||||
|
.then(
|
||||||
|
()=>{
|
||||||
|
resolve(true);
|
||||||
|
},
|
||||||
|
()=>{
|
||||||
|
reject();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
open(tree, suppressNoDom) {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
if(suppressNoDom && (this.domNode == null || typeof(this.domNode) === 'undefined')) {
|
||||||
|
resolve(true);
|
||||||
|
} else if(tree.isOpen(this.domNode)) {
|
||||||
|
resolve(true);
|
||||||
|
} else {
|
||||||
|
tree.open(this.domNode).then(val => resolve(true), err => reject(true));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isCollectionNode(node) {
|
||||||
|
if (pgAdmin.Browser.Nodes && node in pgAdmin.Browser.Nodes) {
|
||||||
|
if (pgAdmin.Browser.Nodes[node].is_collection !== undefined) return pgAdmin.Browser.Nodes[node].is_collection;
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
@ -11,8 +11,8 @@ import gettext from 'sources/gettext';
|
|||||||
|
|
||||||
export function retrieveAncestorOfTypeServer(pgBrowser, item, errorAlertTitle, alertify) {
|
export function retrieveAncestorOfTypeServer(pgBrowser, item, errorAlertTitle, alertify) {
|
||||||
let serverInformation = null;
|
let serverInformation = null;
|
||||||
let aciTreeItem = item || pgBrowser.treeMenu.selected();
|
let aciTreeItem = item || pgBrowser.tree.selected();
|
||||||
let treeNode = pgBrowser.treeMenu.findNodeByDomElement(aciTreeItem);
|
let treeNode = pgBrowser.tree.findNodeByDomElement(aciTreeItem);
|
||||||
|
|
||||||
if (treeNode) {
|
if (treeNode) {
|
||||||
let nodeData;
|
let nodeData;
|
||||||
@ -58,9 +58,8 @@ export function retrieveAncestorOfTypeServer(pgBrowser, item, errorAlertTitle, a
|
|||||||
|
|
||||||
export function retrieveAncestorOfTypeDatabase(pgBrowser, item, errorAlertTitle, alertify) {
|
export function retrieveAncestorOfTypeDatabase(pgBrowser, item, errorAlertTitle, alertify) {
|
||||||
let databaseInfo = null;
|
let databaseInfo = null;
|
||||||
let aciTreeItem = item || pgBrowser.treeMenu.selected();
|
let aciTreeItem = item || pgBrowser.tree.selected();
|
||||||
let treeNode = pgBrowser.treeMenu.findNodeByDomElement(aciTreeItem);
|
let treeNode = pgBrowser.tree.findNodeByDomElement(aciTreeItem);
|
||||||
|
|
||||||
if (treeNode) {
|
if (treeNode) {
|
||||||
if(treeNode.getData()._type === 'database') {
|
if(treeNode.getData()._type === 'database') {
|
||||||
databaseInfo = treeNode.getData();
|
databaseInfo = treeNode.getData();
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import _ from 'underscore';
|
import _ from 'underscore';
|
||||||
import { getTreeNodeHierarchyFromIdentifier } from 'sources/tree/pgadmin_tree_node';
|
|
||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
import gettext from 'sources/gettext';
|
import gettext from 'sources/gettext';
|
||||||
import 'wcdocker';
|
import 'wcdocker';
|
||||||
@ -237,7 +236,7 @@ export function quote_ident(value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function fully_qualify(pgBrowser, data, item) {
|
export function fully_qualify(pgBrowser, data, item) {
|
||||||
const parentData = getTreeNodeHierarchyFromIdentifier.call(pgBrowser, item);
|
const parentData = pgBrowser.tree.getTreeNodeHierarchy(item);
|
||||||
let namespace = '';
|
let namespace = '';
|
||||||
|
|
||||||
if (parentData.schema !== undefined) {
|
if (parentData.schema !== undefined) {
|
||||||
|
@ -166,6 +166,7 @@
|
|||||||
right:0px;
|
right:0px;
|
||||||
bottom:0px;
|
bottom:0px;
|
||||||
height: 100%!important;
|
height: 100%!important;
|
||||||
|
overflow: scroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pg-prop-footer {
|
.pg-prop-footer {
|
||||||
@ -1089,12 +1090,15 @@ textarea {
|
|||||||
border-radius: $border-radius*2;
|
border-radius: $border-radius*2;
|
||||||
background-clip: content-box;
|
background-clip: content-box;
|
||||||
background-color: rgba($scrollbar-base-color, 0.7);
|
background-color: rgba($scrollbar-base-color, 0.7);
|
||||||
|
background: rgba($scrollbar-base-color, 0.7) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
::-webkit-scrollbar-thumb:hover {
|
::-webkit-scrollbar-thumb:hover {
|
||||||
background-color: $scrollbar-base-color;
|
background-color: $scrollbar-base-color;
|
||||||
|
background: $scrollbar-base-color !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
input:-webkit-autofill,
|
input:-webkit-autofill,
|
||||||
input:-webkit-autofill:hover,
|
input:-webkit-autofill:hover,
|
||||||
input:-webkit-autofill:focus,
|
input:-webkit-autofill:focus,
|
||||||
|
123
web/pgadmin/static/scss/_pgadmin4-tree.overrides.scss
Normal file
123
web/pgadmin/static/scss/_pgadmin4-tree.overrides.scss
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
.file-tree {
|
||||||
|
font-family: $font-family-primary !important;
|
||||||
|
font-size: $tree-font-size !important;
|
||||||
|
background-color: $color-bg !important;
|
||||||
|
display: inline-block;
|
||||||
|
color: $tree-text-fg !important;
|
||||||
|
&, & * {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-tree > {
|
||||||
|
div {
|
||||||
|
position: absolute !important;
|
||||||
|
height: 100% !important;
|
||||||
|
top: 0px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-entry
|
||||||
|
{
|
||||||
|
color: $tree-text-fg !important;
|
||||||
|
span.file-name {
|
||||||
|
color: $tree-text-fg !important;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
&:hover, &.pseudo-active {
|
||||||
|
background-color: $tree-bg-hover !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-entry
|
||||||
|
{
|
||||||
|
font: inherit;
|
||||||
|
text-align: left;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 2px 0;
|
||||||
|
padding-left: 2px;
|
||||||
|
cursor: default;
|
||||||
|
&:hover, &.pseudo-active {
|
||||||
|
background-color: $tree-bg-hover !important;
|
||||||
|
}
|
||||||
|
&.active, &.prompt {
|
||||||
|
background-color: $tree-bg-selected !important;
|
||||||
|
border-color: $color-primary-light;
|
||||||
|
border-right: $active-border !important;
|
||||||
|
}
|
||||||
|
i {
|
||||||
|
display: inline-block;
|
||||||
|
font: normal normal normal 18px/1 "default-icons";
|
||||||
|
font-size: 18px;
|
||||||
|
text-align: center;
|
||||||
|
height: 21px !important;
|
||||||
|
width: 20px;
|
||||||
|
&:before {
|
||||||
|
height: inherit;
|
||||||
|
width: inherit;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
&.directory-toggle {
|
||||||
|
&:before {
|
||||||
|
background-position: 6px center !important;
|
||||||
|
font-family: $font-family-icon;
|
||||||
|
content: "\f054" !important;
|
||||||
|
border-style: none;
|
||||||
|
margin-left: 5px;
|
||||||
|
font-weight: 900;
|
||||||
|
right: 15px;
|
||||||
|
top: 3px;
|
||||||
|
font-size: 0.6rem;
|
||||||
|
line-height: 2;
|
||||||
|
}
|
||||||
|
&.open:before {
|
||||||
|
background-position: -14px center !important;
|
||||||
|
font-family: $font-family-icon;
|
||||||
|
content: "\f078" !important;
|
||||||
|
border-style: none;
|
||||||
|
margin-left: 5px;
|
||||||
|
font-weight: 900;
|
||||||
|
transform: none !important;
|
||||||
|
}
|
||||||
|
&.loading:before {
|
||||||
|
background-position: 6px center !important;
|
||||||
|
font-weight: 900;
|
||||||
|
font-size: 0.6rem;
|
||||||
|
line-height: 2;
|
||||||
|
content: '' !important;
|
||||||
|
font-family: $font-family-icon;
|
||||||
|
margin-left: 5px;
|
||||||
|
border-style: none;
|
||||||
|
background: $loader-icon-small 0 0 no-repeat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span.file-label {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding:0 2px 0 2px;
|
||||||
|
border:1px solid transparent;
|
||||||
|
height:auto;
|
||||||
|
white-space:normal;
|
||||||
|
cursor:pointer;
|
||||||
|
margin-right:24px;
|
||||||
|
}
|
||||||
|
&.prompt.new .file-label, &.file .file-label {
|
||||||
|
margin-left: 18px;
|
||||||
|
}
|
||||||
|
span.file-name {
|
||||||
|
font: inherit;
|
||||||
|
flex-grow: 1;
|
||||||
|
user-select: none;
|
||||||
|
cursor: default;
|
||||||
|
color: #c1c1c1;
|
||||||
|
margin-left: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.children-count {
|
||||||
|
margin-left: 3px;
|
||||||
|
}
|
@ -33,3 +33,5 @@ $theme-colors: (
|
|||||||
@import 'pickr.overrides';
|
@import 'pickr.overrides';
|
||||||
@import 'tippy.overrides';
|
@import 'tippy.overrides';
|
||||||
@import 'jsoneditor.overrides';
|
@import 'jsoneditor.overrides';
|
||||||
|
@import 'pgadmin4-tree.overrides';
|
||||||
|
@import 'pgadmin4-tree/src/css/styles';
|
||||||
|
@ -199,7 +199,7 @@ define([
|
|||||||
if (!_.isUndefined(m.get('type')) && m.get('type') === 'server') {
|
if (!_.isUndefined(m.get('type')) && m.get('type') === 'server') {
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = t.selected(),
|
i = t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
return _.isUndefined(d) ? false : d.version >= 110000;
|
return _.isUndefined(d) ? false : d.version >= 110000;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -391,8 +391,7 @@ define([
|
|||||||
visible: function() {
|
visible: function() {
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = t.selected(),
|
i = t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
s = _.isUndefined(i) ? undefined : t.getTreeNodeHierarchy(i)['server'];
|
||||||
s = _.isUndefined(d) ? undefined : pgBrowser.Nodes[d._type].getTreeNodeHierarchy(i)['server'];
|
|
||||||
|
|
||||||
return _.isUndefined(s) ? false : s.version >= 110000;
|
return _.isUndefined(s) ? false : s.version >= 110000;
|
||||||
},
|
},
|
||||||
@ -466,8 +465,7 @@ define([
|
|||||||
|
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = t.selected(),
|
i = t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
s = _.isUndefined(i) ? undefined : t.getTreeNodeHierarchy(i)['server'];
|
||||||
s = _.isUndefined(d) ? undefined : pgBrowser.Nodes[d._type].getTreeNodeHierarchy(i)['server'];
|
|
||||||
|
|
||||||
return _.isUndefined(s) ? false : s.version >= 110000;
|
return _.isUndefined(s) ? false : s.version >= 110000;
|
||||||
},
|
},
|
||||||
@ -518,8 +516,7 @@ define([
|
|||||||
disabled: function(m) {
|
disabled: function(m) {
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = t.selected(),
|
i = t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
s = _.isUndefined(i) ? undefined : t.getTreeNodeHierarchy(i)['server'];
|
||||||
s = _.isUndefined(d) ? undefined : pgBrowser.Nodes[d._type].getTreeNodeHierarchy(i)['server'];
|
|
||||||
|
|
||||||
if (!_.isUndefined(s) && s.version >= 120000)
|
if (!_.isUndefined(s) && s.version >= 120000)
|
||||||
return true;
|
return true;
|
||||||
@ -632,7 +629,7 @@ define([
|
|||||||
label: gettext('Backup...'),
|
label: gettext('Backup...'),
|
||||||
icon: 'fa fa-save',
|
icon: 'fa fa-save',
|
||||||
enable: supportedNodes.enabled.bind(
|
enable: supportedNodes.enabled.bind(
|
||||||
null, pgBrowser.treeMenu, menuUtils.backupSupportedNodes
|
null, pgBrowser.tree, menuUtils.backupSupportedNodes
|
||||||
),
|
),
|
||||||
data: {
|
data: {
|
||||||
data_disabled: gettext('Please select any database or schema or table from the browser tree to take Backup.'),
|
data_disabled: gettext('Please select any database or schema or table from the browser tree to take Backup.'),
|
||||||
@ -650,7 +647,7 @@ define([
|
|||||||
label: gettext('Backup...'),
|
label: gettext('Backup...'),
|
||||||
icon: 'fa fa-save',
|
icon: 'fa fa-save',
|
||||||
enable: supportedNodes.enabled.bind(
|
enable: supportedNodes.enabled.bind(
|
||||||
null, pgBrowser.treeMenu, menuUtils.backupSupportedNodes
|
null, pgBrowser.tree, menuUtils.backupSupportedNodes
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -55,18 +55,15 @@ export class BackupDialog extends Dialog {
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const typeOfDialog = BackupDialog.typeOfDialog(params);
|
const typeOfDialog = BackupDialog.typeOfDialog(params);
|
||||||
|
|
||||||
if (!that.canExecuteOnCurrentDatabase(aciTreeItem)) {
|
if (!that.canExecuteOnCurrentDatabase(aciTreeItem)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const dialog = that.createOrGetDialog(
|
const dialog = that.createOrGetDialog(
|
||||||
BackupDialog.dialogTitle(typeOfDialog),
|
BackupDialog.dialogTitle(typeOfDialog),
|
||||||
typeOfDialog
|
typeOfDialog
|
||||||
);
|
);
|
||||||
|
|
||||||
dialog(true).resizeTo(width, height);
|
dialog(true).resizeTo(width, height);
|
||||||
}).catch(function() {
|
}).catch(function() {
|
||||||
that.alertify.alert(
|
that.alertify.alert(
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import {getTreeNodeHierarchyFromElement} from '../../../../static/js/tree/pgadmin_tree_node';
|
|
||||||
import axios from 'axios/index';
|
import axios from 'axios/index';
|
||||||
import gettext from '../../../../static/js/gettext';
|
import gettext from '../../../../static/js/gettext';
|
||||||
import url_for from '../../../../static/js/url_for';
|
import url_for from '../../../../static/js/url_for';
|
||||||
@ -105,7 +104,7 @@ export class BackupDialogWrapper extends DialogWrapper {
|
|||||||
this.main(title);
|
this.main(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
const treeInfo = getTreeNodeHierarchyFromElement(this.pgBrowser, selectedTreeNode);
|
const treeInfo = this.pgBrowser.tree.getTreeNodeHierarchy(selectedTreeNode);
|
||||||
const dialog = this.createDialog(node, treeInfo, this.typeOfDialog, $container);
|
const dialog = this.createDialog(node, treeInfo, this.typeOfDialog, $container);
|
||||||
this.addAlertifyClassToBackupNodeChildNodes();
|
this.addAlertifyClassToBackupNodeChildNodes();
|
||||||
dialog.render();
|
dialog.render();
|
||||||
@ -162,10 +161,7 @@ export class BackupDialogWrapper extends DialogWrapper {
|
|||||||
'sid': serverIdentifier,
|
'sid': serverIdentifier,
|
||||||
});
|
});
|
||||||
|
|
||||||
const treeInfo = getTreeNodeHierarchyFromElement(
|
const treeInfo = this.pgBrowser.tree.getTreeNodeHierarchy(selectedTreeNode);
|
||||||
this.pgBrowser,
|
|
||||||
selectedTreeNode
|
|
||||||
);
|
|
||||||
|
|
||||||
this.setExtraParameters(selectedTreeNode, treeInfo);
|
this.setExtraParameters(selectedTreeNode, treeInfo);
|
||||||
let backupDate = this.view.model.toJSON();
|
let backupDate = this.view.model.toJSON();
|
||||||
@ -222,7 +218,7 @@ export class BackupDialogWrapper extends DialogWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getSelectedNode() {
|
getSelectedNode() {
|
||||||
const tree = this.pgBrowser.treeMenu;
|
const tree = this.pgBrowser.tree;
|
||||||
const selectedNode = tree.selected();
|
const selectedNode = tree.selected();
|
||||||
if (selectedNode) {
|
if (selectedNode) {
|
||||||
return tree.findNodeByDomElement(selectedNode);
|
return tree.findNodeByDomElement(selectedNode);
|
||||||
@ -260,10 +256,7 @@ export class BackupDialogWrapper extends DialogWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
retrieveServerIdentifier(node, selectedTreeNode) {
|
retrieveServerIdentifier(node, selectedTreeNode) {
|
||||||
const treeInfo = getTreeNodeHierarchyFromElement(
|
const treeInfo = this.pgBrowser.tree.getTreeNodeHierarchy(selectedTreeNode);
|
||||||
this.pgBrowser,
|
|
||||||
selectedTreeNode
|
|
||||||
);
|
|
||||||
return treeInfo.server._id;
|
return treeInfo.server._id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ define('pgadmin.datagrid', [
|
|||||||
const transId = commonUtils.getRandomInt(1, 9999999);
|
const transId = commonUtils.getRandomInt(1, 9999999);
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = aciTreeIdentifier || t.selected(),
|
i = aciTreeIdentifier || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined;
|
d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
//Open query tool with create script if copy_sql_to_query_tool is true else open blank query tool
|
//Open query tool with create script if copy_sql_to_query_tool is true else open blank query tool
|
||||||
var preference = pgBrowser.get_preference('sqleditor', 'copy_sql_to_query_tool');
|
var preference = pgBrowser.get_preference('sqleditor', 'copy_sql_to_query_tool');
|
||||||
@ -312,7 +312,7 @@ define('pgadmin.datagrid', [
|
|||||||
if(panel_data.$titleText[0].innerHTML.includes('File - ')) {
|
if(panel_data.$titleText[0].innerHTML.includes('File - ')) {
|
||||||
is_file = true;
|
is_file = true;
|
||||||
}
|
}
|
||||||
var selected_item = pgBrowser.treeMenu.selected();
|
var selected_item = pgBrowser.tree.selected();
|
||||||
var panel_titles = '';
|
var panel_titles = '';
|
||||||
|
|
||||||
if(is_query_tool) {
|
if(is_query_tool) {
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import {getTreeNodeHierarchyFromIdentifier} from '../../../../static/js/tree/pgadmin_tree_node';
|
|
||||||
import gettext from 'sources/gettext';
|
import gettext from 'sources/gettext';
|
||||||
import Alertify from 'pgadmin.alertifyjs';
|
import Alertify from 'pgadmin.alertifyjs';
|
||||||
import pgWindow from 'sources/window';
|
import pgWindow from 'sources/window';
|
||||||
@ -26,11 +25,12 @@ function isServerInformationAvailable(parentData) {
|
|||||||
export function getPanelTitle(pgBrowser, selected_item=null, custom_title=null, parentData=null, conn_title=false, db_label=null) {
|
export function getPanelTitle(pgBrowser, selected_item=null, custom_title=null, parentData=null, conn_title=false, db_label=null) {
|
||||||
var preferences = pgBrowser.get_preferences_for_module('browser');
|
var preferences = pgBrowser.get_preferences_for_module('browser');
|
||||||
if(selected_item == null && parentData == null) {
|
if(selected_item == null && parentData == null) {
|
||||||
selected_item = pgBrowser.treeMenu.selected();
|
selected_item = pgBrowser.tree.selected();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(parentData == null) {
|
if(parentData == null) {
|
||||||
parentData = getTreeNodeHierarchyFromIdentifier.call(pgBrowser, selected_item);
|
parentData = pgBrowser.tree.getTreeNodeHierarchy(selected_item);
|
||||||
|
if(parentData == null) return;
|
||||||
if (isServerInformationAvailable(parentData)) {
|
if (isServerInformationAvailable(parentData)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
import gettext from '../../../../static/js/gettext';
|
import gettext from '../../../../static/js/gettext';
|
||||||
import url_for from '../../../../static/js/url_for';
|
import url_for from '../../../../static/js/url_for';
|
||||||
import {getTreeNodeHierarchyFromIdentifier} from '../../../../static/js/tree/pgadmin_tree_node';
|
|
||||||
import {getDatabaseLabel, generateTitle} from './datagrid_panel_title';
|
import {getDatabaseLabel, generateTitle} from './datagrid_panel_title';
|
||||||
import CodeMirror from 'bundled_codemirror';
|
import CodeMirror from 'bundled_codemirror';
|
||||||
import * as SqlEditorUtils from 'sources/sqleditor_utils';
|
import * as SqlEditorUtils from 'sources/sqleditor_utils';
|
||||||
@ -25,7 +24,7 @@ export function showDataGrid(
|
|||||||
filter=false,
|
filter=false,
|
||||||
preferences=null
|
preferences=null
|
||||||
) {
|
) {
|
||||||
const node = pgBrowser.treeMenu.findNodeByDomElement(aciTreeIdentifier);
|
const node = pgBrowser.tree.findNodeByDomElement(aciTreeIdentifier);
|
||||||
if (node === undefined || !node.getData()) {
|
if (node === undefined || !node.getData()) {
|
||||||
alertify.alert(
|
alertify.alert(
|
||||||
gettext('Data Grid Error'),
|
gettext('Data Grid Error'),
|
||||||
@ -34,9 +33,7 @@ export function showDataGrid(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parentData = getTreeNodeHierarchyFromIdentifier.call(
|
const parentData = pgBrowser.tree.getTreeNodeHierarchy( aciTreeIdentifier
|
||||||
pgBrowser,
|
|
||||||
aciTreeIdentifier
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if (hasServerOrDatabaseConfiguration(parentData)
|
if (hasServerOrDatabaseConfiguration(parentData)
|
||||||
@ -293,14 +290,13 @@ function hasSchemaOrCatalogOrViewInformation(parentData) {
|
|||||||
export function generateDatagridTitle(pgBrowser, aciTreeIdentifier, custom_title=null, backend_entity=null) {
|
export function generateDatagridTitle(pgBrowser, aciTreeIdentifier, custom_title=null, backend_entity=null) {
|
||||||
//const baseTitle = getPanelTitle(pgBrowser, aciTreeIdentifier);
|
//const baseTitle = getPanelTitle(pgBrowser, aciTreeIdentifier);
|
||||||
var preferences = pgBrowser.get_preferences_for_module('browser');
|
var preferences = pgBrowser.get_preferences_for_module('browser');
|
||||||
const parentData = getTreeNodeHierarchyFromIdentifier.call(
|
const parentData = pgBrowser.tree.getTreeNodeHierarchy(
|
||||||
pgBrowser,
|
|
||||||
aciTreeIdentifier
|
aciTreeIdentifier
|
||||||
);
|
);
|
||||||
|
|
||||||
const namespaceName = retrieveNameSpaceName(parentData);
|
const namespaceName = retrieveNameSpaceName(parentData);
|
||||||
const db_label = !_.isUndefined(backend_entity) && backend_entity != null && backend_entity.hasOwnProperty('db_name') ? backend_entity['db_name'] : getDatabaseLabel(parentData);
|
const db_label = !_.isUndefined(backend_entity) && backend_entity != null && backend_entity.hasOwnProperty('db_name') ? backend_entity['db_name'] : getDatabaseLabel(parentData);
|
||||||
const node = pgBrowser.treeMenu.findNodeByDomElement(aciTreeIdentifier);
|
const node = pgBrowser.tree.findNodeByDomElement(aciTreeIdentifier);
|
||||||
|
|
||||||
var dtg_title_placeholder = '';
|
var dtg_title_placeholder = '';
|
||||||
if(custom_title) {
|
if(custom_title) {
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
import gettext from '../../../../static/js/gettext';
|
import gettext from '../../../../static/js/gettext';
|
||||||
import url_for from '../../../../static/js/url_for';
|
import url_for from '../../../../static/js/url_for';
|
||||||
import {getTreeNodeHierarchyFromIdentifier} from '../../../../static/js/tree/pgadmin_tree_node';
|
|
||||||
import {getPanelTitle} from './datagrid_panel_title';
|
import {getPanelTitle} from './datagrid_panel_title';
|
||||||
import {getRandomInt} from 'sources/utils';
|
import {getRandomInt} from 'sources/utils';
|
||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
@ -52,7 +51,7 @@ export function showQueryTool(datagrid, pgBrowser, alertify, url, aciTreeIdentif
|
|||||||
const sURL = url || '';
|
const sURL = url || '';
|
||||||
const queryToolTitle = generateTitle(pgBrowser, aciTreeIdentifier);
|
const queryToolTitle = generateTitle(pgBrowser, aciTreeIdentifier);
|
||||||
|
|
||||||
const currentNode = pgBrowser.treeMenu.findNodeByDomElement(aciTreeIdentifier);
|
const currentNode = pgBrowser.tree.findNodeByDomElement(aciTreeIdentifier);
|
||||||
if (currentNode === undefined) {
|
if (currentNode === undefined) {
|
||||||
alertify.alert(
|
alertify.alert(
|
||||||
gettext('Query Tool Error'),
|
gettext('Query Tool Error'),
|
||||||
@ -61,8 +60,7 @@ export function showQueryTool(datagrid, pgBrowser, alertify, url, aciTreeIdentif
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parentData = getTreeNodeHierarchyFromIdentifier.call(
|
const parentData = pgBrowser.tree.getTreeNodeHierarchy(currentNode);
|
||||||
pgBrowser, aciTreeIdentifier);
|
|
||||||
|
|
||||||
if (hasServerInformations(parentData)) {
|
if (hasServerInformations(parentData)) {
|
||||||
return;
|
return;
|
||||||
|
@ -227,13 +227,12 @@ define([
|
|||||||
// Find the function is really available in database
|
// Find the function is really available in database
|
||||||
var tree = pgBrowser.tree,
|
var tree = pgBrowser.tree,
|
||||||
info = tree.selected(),
|
info = tree.selected(),
|
||||||
d_ = info && info.length == 1 ? tree.itemData(info) : undefined,
|
d_ = info ? tree.itemData(info) : undefined;
|
||||||
node = d_ && pgBrowser.Nodes[d_._type];
|
|
||||||
|
|
||||||
if (!d_)
|
if (!d_)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var treeInfo = node.getTreeNodeHierarchy.apply(node, [info]);
|
var treeInfo = tree.getTreeNodeHierarchy(info);
|
||||||
|
|
||||||
// For indirect debugging user must be super user
|
// For indirect debugging user must be super user
|
||||||
if (data && data.debug_type && data.debug_type == 'indirect' &&
|
if (data && data.debug_type && data.debug_type == 'indirect' &&
|
||||||
@ -302,13 +301,13 @@ define([
|
|||||||
check_func_debuggable: function(args, item) {
|
check_func_debuggable: function(args, item) {
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = item || t.selected(),
|
i = item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
d = i ? t.itemData(i) : undefined,
|
||||||
node = d && pgBrowser.Nodes[d._type];
|
node = d && pgBrowser.Nodes[d._type];
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var treeInfo = node.getTreeNodeHierarchy.apply(node, [i]),
|
var treeInfo = t.getTreeNodeHierarchy(i),
|
||||||
_url = this.generate_url('init', treeInfo, node);
|
_url = this.generate_url('init', treeInfo, node);
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
@ -338,16 +337,15 @@ define([
|
|||||||
var self = this;
|
var self = this;
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = item || t.selected(),
|
i = item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
d = i ? t.itemData(i) : undefined,
|
||||||
node = d && pgBrowser.Nodes[d._type],
|
tree_data = pgBrowser.tree.translateTreeNodeIdFromReactTree(i),
|
||||||
tree_data = pgBrowser.treeMenu.translateTreeNodeIdFromACITree(i),
|
db_data = pgBrowser.tree.findNode(tree_data[3]),
|
||||||
db_data = pgBrowser.treeMenu.findNode(tree_data.slice(0,4)),
|
|
||||||
dbNode = db_data.domNode;
|
dbNode = db_data.domNode;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var treeInfo = node.getTreeNodeHierarchy.apply(node, [i]),
|
var treeInfo = t.getTreeNodeHierarchy(i),
|
||||||
baseUrl;
|
baseUrl;
|
||||||
|
|
||||||
if (d._type == 'function' || d._type == 'edbfunc') {
|
if (d._type == 'function' || d._type == 'edbfunc') {
|
||||||
@ -515,10 +513,10 @@ define([
|
|||||||
|
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = item || t.selected(),
|
i = item || t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
d = i ? t.itemData(i) : undefined,
|
||||||
node = d && pgBrowser.Nodes[d._type],
|
node = d && pgBrowser.Nodes[d._type],
|
||||||
tree_data = pgBrowser.treeMenu.translateTreeNodeIdFromACITree(i),
|
tree_data = pgBrowser.tree.translateTreeNodeIdFromReactTree(i),
|
||||||
db_data = pgBrowser.treeMenu.findNode(tree_data.slice(0,4)),
|
db_data = pgBrowser.tree.findNode(tree_data[3]),
|
||||||
dbNode = db_data.domNode;
|
dbNode = db_data.domNode;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
@ -526,7 +524,7 @@ define([
|
|||||||
|
|
||||||
var is_edb_proc = d._type == 'edbproc';
|
var is_edb_proc = d._type == 'edbproc';
|
||||||
|
|
||||||
var treeInfo = node.getTreeNodeHierarchy.apply(node, [i]),
|
var treeInfo = t.getTreeNodeHierarchy(i),
|
||||||
_url = this.generate_url('init', treeInfo, node);
|
_url = this.generate_url('init', treeInfo, node);
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@ -546,13 +544,12 @@ define([
|
|||||||
// Directly open the panel
|
// Directly open the panel
|
||||||
var _t = pgBrowser.tree,
|
var _t = pgBrowser.tree,
|
||||||
_i = _t.selected(),
|
_i = _t.selected(),
|
||||||
_d = _i && _i.length == 1 ? _t.itemData(_i) : undefined,
|
_d = _i ? _t.itemData(_i) : undefined;
|
||||||
_node = _d && pgBrowser.Nodes[_d._type];
|
|
||||||
|
|
||||||
if (!_d)
|
if (!_d)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var newTreeInfo = _node.getTreeNodeHierarchy.apply(_node, [_i]),
|
var newTreeInfo = _t.getTreeNodeHierarchy(_i),
|
||||||
baseUrl;
|
baseUrl;
|
||||||
|
|
||||||
if (_d._type == 'function' || _d._type == 'edbfunc') {
|
if (_d._type == 'function' || _d._type == 'edbfunc') {
|
||||||
|
@ -188,13 +188,12 @@ define([
|
|||||||
if (restart_debug == 0) {
|
if (restart_debug == 0) {
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = t.selected(),
|
i = t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
d = i ? t.itemData(i) : undefined;
|
||||||
node = d && pgBrowser.Nodes[d._type];
|
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var treeInfo = node.getTreeNodeHierarchy.apply(node, [i]),
|
var treeInfo = t.getTreeNodeHierarchy(i),
|
||||||
_Url;
|
_Url;
|
||||||
|
|
||||||
if (d._type == 'function') {
|
if (d._type == 'function') {
|
||||||
@ -623,13 +622,12 @@ define([
|
|||||||
if (self.setting('restart_debug') == 0) {
|
if (self.setting('restart_debug') == 0) {
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = t.selected(),
|
i = t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
d = i ? t.itemData(i) : undefined;
|
||||||
node = d && pgBrowser.Nodes[d._type];
|
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var treeInfo = node.getTreeNodeHierarchy.apply(node, [i]);
|
var treeInfo = t.getTreeNodeHierarchy(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
var args_value_list = [];
|
var args_value_list = [];
|
||||||
@ -939,8 +937,7 @@ define([
|
|||||||
if (!item_data)
|
if (!item_data)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let node_ele = pgBrowser.Nodes[item_data._type];
|
let tree_info = pgBrowser.tree.getTreeNodeHierarchy(selected_item);
|
||||||
let tree_info = node_ele.getTreeNodeHierarchy.call(node_ele, selected_item);
|
|
||||||
|
|
||||||
base_url = url_for('debugger.clear_arguments', {
|
base_url = url_for('debugger.clear_arguments', {
|
||||||
'sid': tree_info.server._id,
|
'sid': tree_info.server._id,
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import Alertify from 'pgadmin.alertifyjs';
|
import Alertify from 'pgadmin.alertifyjs';
|
||||||
import {getTreeNodeHierarchyFromIdentifier} from 'sources/tree/pgadmin_tree_node';
|
|
||||||
import {getPanelTitle} from 'tools/datagrid/static/js/datagrid_panel_title';
|
import {getPanelTitle} from 'tools/datagrid/static/js/datagrid_panel_title';
|
||||||
import {getRandomInt, registerDetachEvent} from 'sources/utils';
|
import {getRandomInt, registerDetachEvent} from 'sources/utils';
|
||||||
|
|
||||||
@ -98,10 +97,9 @@ export function initialize(gettext, url_for, $, _, pgAdmin, csrfToken, pgBrowser
|
|||||||
return isEnabled;
|
return isEnabled;
|
||||||
},
|
},
|
||||||
|
|
||||||
// Callback to draw schema diff for objects
|
// Callback to draw ERD Tool for objects
|
||||||
showErdTool: function(data, aciTreeIdentifier, gen=false) {
|
showErdTool: function(data, aciTreeIdentifier, gen=false) {
|
||||||
const node = pgBrowser.treeMenu.findNodeByDomElement(aciTreeIdentifier);
|
if (aciTreeIdentifier === undefined) {
|
||||||
if (node === undefined || !node.getData()) {
|
|
||||||
Alertify.alert(
|
Alertify.alert(
|
||||||
gettext('ERD Error'),
|
gettext('ERD Error'),
|
||||||
gettext('No object selected.')
|
gettext('No object selected.')
|
||||||
@ -109,10 +107,7 @@ export function initialize(gettext, url_for, $, _, pgAdmin, csrfToken, pgBrowser
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parentData = getTreeNodeHierarchyFromIdentifier.call(
|
const parentData = pgBrowser.tree.getTreeNodeHierarchy(aciTreeIdentifier);
|
||||||
pgBrowser,
|
|
||||||
aciTreeIdentifier
|
|
||||||
);
|
|
||||||
|
|
||||||
if(_.isUndefined(parentData.database)) {
|
if(_.isUndefined(parentData.database)) {
|
||||||
Alertify.alert(
|
Alertify.alert(
|
||||||
|
@ -52,7 +52,7 @@ define([
|
|||||||
label: gettext('Grant Wizard...'),
|
label: gettext('Grant Wizard...'),
|
||||||
icon: 'fa fa-unlock',
|
icon: 'fa fa-unlock',
|
||||||
enable: supportedNodes.enabled.bind(
|
enable: supportedNodes.enabled.bind(
|
||||||
null, pgBrowser.treeMenu, menuUtils.supportedNodes
|
null, pgBrowser.tree, menuUtils.supportedNodes
|
||||||
),
|
),
|
||||||
data: {
|
data: {
|
||||||
data_disabled: gettext('Please select any database, schema or schema objects from the browser tree to access Grant Wizard Tool.'),
|
data_disabled: gettext('Please select any database, schema or schema objects from the browser tree to access Grant Wizard Tool.'),
|
||||||
@ -71,7 +71,7 @@ define([
|
|||||||
label: gettext('Grant Wizard...'),
|
label: gettext('Grant Wizard...'),
|
||||||
icon: 'fa fa-unlock',
|
icon: 'fa fa-unlock',
|
||||||
enable: supportedNodes.enabled.bind(
|
enable: supportedNodes.enabled.bind(
|
||||||
null, pgBrowser.treeMenu, menuUtils.supportedNodes
|
null, pgBrowser.tree, menuUtils.supportedNodes
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -112,8 +112,8 @@ define([
|
|||||||
Alertify.pgDialogBuild.apply(this);
|
Alertify.pgDialogBuild.apply(this);
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = t.selected(),
|
i = t.selected(),
|
||||||
d = this.d = i && i.length == 1 ? t.itemData(i) : undefined,
|
d = this.d = i ? t.itemData(i) : undefined,
|
||||||
info = this.info = pgBrowser.Node.getTreeNodeHierarchy(i);
|
info = this.info = pgBrowser.tree.getTreeNodeHierarchy(i);
|
||||||
|
|
||||||
var sid = info.server._id,
|
var sid = info.server._id,
|
||||||
did = info.database._id;
|
did = info.database._id;
|
||||||
|
@ -410,7 +410,7 @@ define([
|
|||||||
label: gettext('Import/Export...'),
|
label: gettext('Import/Export...'),
|
||||||
icon: 'fa fa-shopping-cart',
|
icon: 'fa fa-shopping-cart',
|
||||||
enable: supportedNodes.enabled.bind(
|
enable: supportedNodes.enabled.bind(
|
||||||
null, pgBrowser.treeMenu, ['table']
|
null, pgBrowser.tree, ['table']
|
||||||
),
|
),
|
||||||
data: {
|
data: {
|
||||||
data_disabled: gettext('Please select any table from the browser tree to Import/Export data.'),
|
data_disabled: gettext('Please select any table from the browser tree to Import/Export data.'),
|
||||||
@ -433,7 +433,7 @@ define([
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pgBrowser.tree.hasParent(i)) {
|
if (pgBrowser.tree.hasParent(i)) {
|
||||||
i = $(pgBrowser.tree.parent(i));
|
i = pgBrowser.tree.parent(i);
|
||||||
} else {
|
} else {
|
||||||
Alertify.alert(gettext('Please select server or child node from tree.'));
|
Alertify.alert(gettext('Please select server or child node from tree.'));
|
||||||
break;
|
break;
|
||||||
@ -450,13 +450,13 @@ define([
|
|||||||
|
|
||||||
var t = pgBrowser.tree;
|
var t = pgBrowser.tree;
|
||||||
i = item || t.selected();
|
i = item || t.selected();
|
||||||
var d = i && i.length == 1 ? t.itemData(i) : undefined,
|
var d = i ? t.itemData(i) : undefined,
|
||||||
node = d && pgBrowser.Nodes[d._type];
|
node = d && pgBrowser.Nodes[d._type];
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var treeInfo = node.getTreeNodeHierarchy.apply(node, [i]);
|
var treeInfo = t && t.getTreeNodeHierarchy(i);
|
||||||
|
|
||||||
if (!Alertify.ImportDialog) {
|
if (!Alertify.ImportDialog) {
|
||||||
Alertify.dialog('ImportDialog', function factory() {
|
Alertify.dialog('ImportDialog', function factory() {
|
||||||
@ -505,9 +505,8 @@ define([
|
|||||||
callback: function(e) {
|
callback: function(e) {
|
||||||
if (e.button['data-btn-name'] === 'ok') {
|
if (e.button['data-btn-name'] === 'ok') {
|
||||||
|
|
||||||
var n = this.settings['pg_node'],
|
var itemArr = this.settings['pg_item'],
|
||||||
itemArr = this.settings['pg_item'],
|
treeData = pgBrowser.tree.getTreeNodeHierarchy(itemArr);
|
||||||
treeData = n.getTreeNodeHierarchy.apply(n, [itemArr]);
|
|
||||||
|
|
||||||
this.view.model.set({
|
this.view.model.set({
|
||||||
'database': treeData.database._label,
|
'database': treeData.database._label,
|
||||||
@ -589,9 +588,8 @@ define([
|
|||||||
this.__internal.buttons[1].element.disabled = true;
|
this.__internal.buttons[1].element.disabled = true;
|
||||||
|
|
||||||
var $container = $('<div class=\'import_dlg\'></div>'),
|
var $container = $('<div class=\'import_dlg\'></div>'),
|
||||||
n = this.settings.pg_node,
|
|
||||||
itemArr = this.settings.pg_item,
|
itemArr = this.settings.pg_item,
|
||||||
treeData = n.getTreeNodeHierarchy.apply(n, [itemArr]),
|
treeData = pgBrowser.tree.getTreeNodeHierarchy(itemArr),
|
||||||
newModel = new ImportExportModel({}, {
|
newModel = new ImportExportModel({}, {
|
||||||
node_info: treeData,
|
node_info: treeData,
|
||||||
}),
|
}),
|
||||||
|
@ -166,7 +166,7 @@ define([
|
|||||||
label: gettext('Maintenance...'),
|
label: gettext('Maintenance...'),
|
||||||
icon: 'fa fa-wrench',
|
icon: 'fa fa-wrench',
|
||||||
enable: supportedNodes.enabled.bind(
|
enable: supportedNodes.enabled.bind(
|
||||||
null, pgBrowser.treeMenu, menuUtils.maintenanceSupportedNodes
|
null, pgBrowser.tree, menuUtils.maintenanceSupportedNodes
|
||||||
),
|
),
|
||||||
data: {
|
data: {
|
||||||
data_disabled: gettext('Please select any database from the browser tree to do Maintenance.'),
|
data_disabled: gettext('Please select any database from the browser tree to do Maintenance.'),
|
||||||
@ -185,7 +185,7 @@ define([
|
|||||||
label: gettext('Maintenance...'),
|
label: gettext('Maintenance...'),
|
||||||
icon: 'fa fa-wrench',
|
icon: 'fa fa-wrench',
|
||||||
enable: supportedNodes.enabled.bind(
|
enable: supportedNodes.enabled.bind(
|
||||||
null, pgBrowser.treeMenu, menuUtils.maintenanceSupportedNodes
|
null, pgBrowser.tree, menuUtils.maintenanceSupportedNodes
|
||||||
),
|
),
|
||||||
data: {
|
data: {
|
||||||
data_disabled: gettext('Please select any database from the browser tree to do Maintenance.'),
|
data_disabled: gettext('Please select any database from the browser tree to do Maintenance.'),
|
||||||
@ -210,7 +210,7 @@ define([
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pgBrowser.tree.hasParent(i)) {
|
if (pgBrowser.tree.hasParent(i)) {
|
||||||
i = $(pgBrowser.tree.parent(i));
|
i = pgBrowser.tree.parent(i);
|
||||||
} else {
|
} else {
|
||||||
Alertify.alert(gettext('Please select server or child node from tree.'));
|
Alertify.alert(gettext('Please select server or child node from tree.'));
|
||||||
break;
|
break;
|
||||||
@ -230,13 +230,12 @@ define([
|
|||||||
|
|
||||||
i = item || t.selected();
|
i = item || t.selected();
|
||||||
|
|
||||||
var d = i && i.length == 1 ? t.itemData(i) : undefined;
|
var d = i ? t.itemData(i) : undefined;
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var node = pgBrowser.Nodes[d._type],
|
var treeInfo = t && t.getTreeNodeHierarchy(i);
|
||||||
treeInfo = node.getTreeNodeHierarchy.apply(node, [i]);
|
|
||||||
|
|
||||||
if (treeInfo.database._label.indexOf('=') >= 0) {
|
if (treeInfo.database._label.indexOf('=') >= 0) {
|
||||||
Alertify.alert(
|
Alertify.alert(
|
||||||
@ -304,7 +303,7 @@ define([
|
|||||||
// Callback functions when click on the buttons of the Alertify dialogs
|
// Callback functions when click on the buttons of the Alertify dialogs
|
||||||
callback: function(e) {
|
callback: function(e) {
|
||||||
var sel_item = pgBrowser.tree.selected(),
|
var sel_item = pgBrowser.tree.selected(),
|
||||||
itemData = sel_item && sel_item.length == 1 ? pgBrowser.tree.itemData(sel_item) : undefined,
|
itemData = sel_item ? pgBrowser.tree.itemData(sel_item) : undefined,
|
||||||
sel_node = itemData && pgBrowser.Nodes[itemData._type];
|
sel_node = itemData && pgBrowser.Nodes[itemData._type];
|
||||||
|
|
||||||
if (e.button.element.name == 'dialog_help' || e.button.element.name == 'object_help') {
|
if (e.button.element.name == 'dialog_help' || e.button.element.name == 'object_help') {
|
||||||
@ -325,7 +324,7 @@ define([
|
|||||||
if (!itemData)
|
if (!itemData)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var node_hierarchy = sel_node.getTreeNodeHierarchy.apply(sel_node, [sel_item]);
|
var node_hierarchy = pgBrowser.tree.getTreeNodeHierarchy(sel_item);
|
||||||
|
|
||||||
if (node_hierarchy.schema != undefined) {
|
if (node_hierarchy.schema != undefined) {
|
||||||
schema = node_hierarchy.schema._label;
|
schema = node_hierarchy.schema._label;
|
||||||
@ -409,13 +408,13 @@ define([
|
|||||||
var $container = $('<div class=\'maintenance_dlg\'></div>');
|
var $container = $('<div class=\'maintenance_dlg\'></div>');
|
||||||
var tree = pgBrowser.tree,
|
var tree = pgBrowser.tree,
|
||||||
sel_item = tree.selected(),
|
sel_item = tree.selected(),
|
||||||
itemInfo = sel_item && sel_item.length == 1 ? tree.itemData(sel_item) : undefined,
|
itemInfo = sel_item ? tree.itemData(sel_item) : undefined,
|
||||||
nodeData = itemInfo && pgBrowser.Nodes[itemInfo._type];
|
nodeData = itemInfo && pgBrowser.Nodes[itemInfo._type];
|
||||||
|
|
||||||
if (!itemInfo)
|
if (!itemInfo)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var treeData = nodeData.getTreeNodeHierarchy.apply(nodeData, [sel_item]);
|
var treeData = tree.getTreeNodeHierarchy(sel_item);
|
||||||
|
|
||||||
var newModel = new MaintenanceModel({}, {
|
var newModel = new MaintenanceModel({}, {
|
||||||
node_info: treeData,
|
node_info: treeData,
|
||||||
|
@ -18,7 +18,6 @@ import {getRandomInt, hasBinariesConfiguration, registerDetachEvent} from 'sourc
|
|||||||
import {retrieveAncestorOfTypeServer} from 'sources/tree/tree_utils';
|
import {retrieveAncestorOfTypeServer} from 'sources/tree/tree_utils';
|
||||||
import pgWindow from 'sources/window';
|
import pgWindow from 'sources/window';
|
||||||
|
|
||||||
import {getTreeNodeHierarchyFromIdentifier} from 'sources/tree/pgadmin_tree_node';
|
|
||||||
import {generateTitle, refresh_db_node} from 'tools/datagrid/static/js/datagrid_panel_title';
|
import {generateTitle, refresh_db_node} from 'tools/datagrid/static/js/datagrid_panel_title';
|
||||||
|
|
||||||
|
|
||||||
@ -120,7 +119,7 @@ export function initialize(gettext, url_for, $, _, pgAdmin, csrfToken, Browser)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const node = pgBrowser.treeMenu.findNodeByDomElement(aciTreeIdentifier);
|
const node = pgBrowser.tree.findNodeByDomElement(aciTreeIdentifier);
|
||||||
if (node === undefined || !node.getData()) {
|
if (node === undefined || !node.getData()) {
|
||||||
Alertify.alert(
|
Alertify.alert(
|
||||||
gettext('PSQL Error'),
|
gettext('PSQL Error'),
|
||||||
@ -129,10 +128,7 @@ export function initialize(gettext, url_for, $, _, pgAdmin, csrfToken, Browser)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
parentData = getTreeNodeHierarchyFromIdentifier.call(
|
parentData = pgBrowser.tree.getTreeNodeHierarchy(aciTreeIdentifier);
|
||||||
pgBrowser,
|
|
||||||
aciTreeIdentifier
|
|
||||||
);
|
|
||||||
|
|
||||||
if(_.isUndefined(parentData.server)) {
|
if(_.isUndefined(parentData.server)) {
|
||||||
Alertify.alert(
|
Alertify.alert(
|
||||||
@ -366,9 +362,9 @@ export function initialize(gettext, url_for, $, _, pgAdmin, csrfToken, Browser)
|
|||||||
check_db_name_change: function(db_name, o_db_name) {
|
check_db_name_change: function(db_name, o_db_name) {
|
||||||
if (db_name != o_db_name) {
|
if (db_name != o_db_name) {
|
||||||
|
|
||||||
var selected_item = pgWindow.pgAdmin.Browser.treeMenu.selected(),
|
var selected_item = pgWindow.pgAdmin.Browser.tree.selected(),
|
||||||
tree_data = pgWindow.pgAdmin.Browser.treeMenu.translateTreeNodeIdFromACITree(selected_item),
|
tree_data = pgWindow.pgAdmin.Browser.tree.translateTreeNodeIdFromReactTree(selected_item),
|
||||||
database_data = pgWindow.pgAdmin.Browser.treeMenu.findNode(tree_data.slice(0,4)),
|
database_data = pgWindow.pgAdmin.Browser.tree.findNode(tree_data[3]),
|
||||||
dbNode = database_data.domNode;
|
dbNode = database_data.domNode;
|
||||||
|
|
||||||
var message = `Current database has been moved or renamed to ${o_db_name}. Click on the OK button to refresh the database name, and reopen the psql again.`;
|
var message = `Current database has been moved or renamed to ${o_db_name}. Click on the OK button to refresh the database name, and reopen the psql again.`;
|
||||||
|
@ -271,8 +271,8 @@ define('tools.restore', [
|
|||||||
visible: function() {
|
visible: function() {
|
||||||
var t = pgBrowser.tree,
|
var t = pgBrowser.tree,
|
||||||
i = t.selected(),
|
i = t.selected(),
|
||||||
d = i && i.length == 1 ? t.itemData(i) : undefined,
|
d = i ? t.itemData(i) : undefined,
|
||||||
s = _.isUndefined(d) ? undefined : pgBrowser.Nodes[d._type].getTreeNodeHierarchy(i)['server'];
|
s = _.isUndefined(d) ? undefined : pgBrowser.tree.getTreeNodeHierarchy(i)['server'];
|
||||||
|
|
||||||
return _.isUndefined(s) ? false : s.version >= 110000;
|
return _.isUndefined(s) ? false : s.version >= 110000;
|
||||||
},
|
},
|
||||||
@ -396,7 +396,7 @@ define('tools.restore', [
|
|||||||
label: gettext('Restore...'),
|
label: gettext('Restore...'),
|
||||||
icon: 'fa fa-upload',
|
icon: 'fa fa-upload',
|
||||||
enable: supportedNodes.enabled.bind(
|
enable: supportedNodes.enabled.bind(
|
||||||
null, pgBrowser.treeMenu, menuUtils.restoreSupportedNodes
|
null, pgBrowser.tree, menuUtils.restoreSupportedNodes
|
||||||
),
|
),
|
||||||
data: {
|
data: {
|
||||||
data_disabled: gettext('Please select any schema or table from the browser tree to Restore data.'),
|
data_disabled: gettext('Please select any schema or table from the browser tree to Restore data.'),
|
||||||
@ -414,7 +414,7 @@ define('tools.restore', [
|
|||||||
label: gettext('Restore...'),
|
label: gettext('Restore...'),
|
||||||
icon: 'fa fa-upload',
|
icon: 'fa fa-upload',
|
||||||
enable: supportedNodes.enabled.bind(
|
enable: supportedNodes.enabled.bind(
|
||||||
null, pgBrowser.treeMenu, menuUtils.restoreSupportedNodes
|
null, pgBrowser.tree, menuUtils.restoreSupportedNodes
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -57,8 +57,8 @@ export class RestoreDialog extends Dialog {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let aciTreeItem1 = aciTreeItem || that.pgBrowser.treeMenu.selected();
|
let aciTreeItem1 = aciTreeItem || that.pgBrowser.tree.selected();
|
||||||
let item = that.pgBrowser.treeMenu.findNodeByDomElement(aciTreeItem1);
|
let item = that.pgBrowser.tree.findNodeByDomElement(aciTreeItem1);
|
||||||
const data = item.getData();
|
const data = item.getData();
|
||||||
const node = that.pgBrowser.Nodes[data._type];
|
const node = that.pgBrowser.Nodes[data._type];
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import {getTreeNodeHierarchyFromElement} from '../../../../static/js/tree/pgadmin_tree_node';
|
|
||||||
import axios from 'axios/index';
|
import axios from 'axios/index';
|
||||||
import _ from 'underscore';
|
import _ from 'underscore';
|
||||||
import gettext from '../../../../static/js/gettext';
|
import gettext from '../../../../static/js/gettext';
|
||||||
@ -93,8 +92,7 @@ export class RestoreDialogWrapper extends DialogWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const node = this.pgBrowser.Nodes[selectedTreeNodeData._type];
|
const node = this.pgBrowser.Nodes[selectedTreeNodeData._type];
|
||||||
|
const treeInfo = this.pgBrowser.tree.getTreeNodeHierarchy(selectedTreeNode);
|
||||||
const treeInfo = getTreeNodeHierarchyFromElement(this.pgBrowser, selectedTreeNode);
|
|
||||||
const dialog = this.createDialog(node, treeInfo, $container);
|
const dialog = this.createDialog(node, treeInfo, $container);
|
||||||
this.addAlertifyClassToRestoreNodeChildNodes();
|
this.addAlertifyClassToRestoreNodeChildNodes();
|
||||||
dialog.render();
|
dialog.render();
|
||||||
@ -149,10 +147,7 @@ export class RestoreDialogWrapper extends DialogWrapper {
|
|||||||
'sid': serverIdentifier,
|
'sid': serverIdentifier,
|
||||||
});
|
});
|
||||||
|
|
||||||
const treeInfo = getTreeNodeHierarchyFromElement(
|
const treeInfo = this.pgBrowser.tree.getTreeNodeHierarchy(selectedTreeNode);
|
||||||
this.pgBrowser,
|
|
||||||
selectedTreeNode
|
|
||||||
);
|
|
||||||
|
|
||||||
this.setExtraParameters(selectedTreeNode, treeInfo);
|
this.setExtraParameters(selectedTreeNode, treeInfo);
|
||||||
|
|
||||||
@ -190,7 +185,7 @@ export class RestoreDialogWrapper extends DialogWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getSelectedNode() {
|
getSelectedNode() {
|
||||||
const tree = this.pgBrowser.treeMenu;
|
const tree = this.pgBrowser.tree;
|
||||||
const selectedNode = tree.selected();
|
const selectedNode = tree.selected();
|
||||||
if (selectedNode) {
|
if (selectedNode) {
|
||||||
return tree.findNodeByDomElement(selectedNode);
|
return tree.findNodeByDomElement(selectedNode);
|
||||||
@ -225,10 +220,7 @@ export class RestoreDialogWrapper extends DialogWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
retrieveServerIdentifier(node, selectedTreeNode) {
|
retrieveServerIdentifier(node, selectedTreeNode) {
|
||||||
const treeInfo = getTreeNodeHierarchyFromElement(
|
const treeInfo = this.pgBrowser.tree.getTreeNodeHierarchy(selectedTreeNode);
|
||||||
this.pgBrowser,
|
|
||||||
selectedTreeNode
|
|
||||||
);
|
|
||||||
return treeInfo.server._id;
|
return treeInfo.server._id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,12 @@
|
|||||||
import {getTreeNodeHierarchyFromElement} from 'sources/tree/pgadmin_tree_node';
|
/////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// pgAdmin 4 - PostgreSQL Tools
|
||||||
|
//
|
||||||
|
// Copyright (C) 2013 - 2021, The pgAdmin Development Team
|
||||||
|
// This software is released under the PostgreSQL Licence
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import axios from 'axios/index';
|
import axios from 'axios/index';
|
||||||
import gettext from 'sources/gettext';
|
import gettext from 'sources/gettext';
|
||||||
import url_for from 'sources/url_for';
|
import url_for from 'sources/url_for';
|
||||||
@ -261,7 +269,7 @@ export default class SearchObjectsDialogWrapper extends DialogWrapper {
|
|||||||
|
|
||||||
this.grid.onDblClick.subscribe((event, args) => {
|
this.grid.onDblClick.subscribe((event, args) => {
|
||||||
let rowData = this.dataview.getItem(args.row);
|
let rowData = this.dataview.getItem(args.row);
|
||||||
let treeMenu = this.pgBrowser.treeMenu;
|
let tree = this.pgBrowser.tree;
|
||||||
|
|
||||||
if(!rowData.show_node) {
|
if(!rowData.show_node) {
|
||||||
this.showMessage(
|
this.showMessage(
|
||||||
@ -278,9 +286,9 @@ export default class SearchObjectsDialogWrapper extends DialogWrapper {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
this.showMessage(gettext('Locating...'));
|
this.showMessage(gettext('Locating...'));
|
||||||
treeMenu.findNodeWithToggle(rowData.id_path)
|
tree.findNodeWithToggle(rowData.id_path)
|
||||||
.then((treeItem)=>{
|
.then((treeItem)=>{
|
||||||
treeMenu.selectNode(treeItem.domNode, true);
|
tree.select(treeItem, true);
|
||||||
this.showMessage(null);
|
this.showMessage(null);
|
||||||
})
|
})
|
||||||
.catch((error)=>{
|
.catch((error)=>{
|
||||||
@ -349,7 +357,7 @@ export default class SearchObjectsDialogWrapper extends DialogWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getSelectedNode() {
|
getSelectedNode() {
|
||||||
const tree = this.pgBrowser.treeMenu;
|
const tree = this.pgBrowser.tree;
|
||||||
const selectedNode = tree.selected();
|
const selectedNode = tree.selected();
|
||||||
if (selectedNode) {
|
if (selectedNode) {
|
||||||
return tree.findNodeByDomElement(selectedNode);
|
return tree.findNodeByDomElement(selectedNode);
|
||||||
@ -404,7 +412,7 @@ export default class SearchObjectsDialogWrapper extends DialogWrapper {
|
|||||||
let id_path = [
|
let id_path = [
|
||||||
this.treeInfo.server_group.id,
|
this.treeInfo.server_group.id,
|
||||||
this.treeInfo.server.id,
|
this.treeInfo.server.id,
|
||||||
this.getCollNode('database').type + '/' + this.treeInfo.server._id,
|
this.getCollNode('database').type + '_' + this.treeInfo.server._id,
|
||||||
this.treeInfo.database.id,
|
this.treeInfo.database.id,
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -435,10 +443,10 @@ export default class SearchObjectsDialogWrapper extends DialogWrapper {
|
|||||||
let coll_node = this.getCollNode(node_type);
|
let coll_node = this.getCollNode(node_type);
|
||||||
if(coll_node) {
|
if(coll_node) {
|
||||||
/* Add coll node to the path */
|
/* Add coll node to the path */
|
||||||
if(prev_node_id != null) id_path.push(`${coll_node.type}/${prev_node_id}`);
|
if(prev_node_id != null) id_path.push(`${coll_node.type}_${prev_node_id}`);
|
||||||
|
|
||||||
/* Add the node to the path */
|
/* Add the node to the path */
|
||||||
id_path.push(`${node_type}/${node_oid}`);
|
id_path.push(`${node_type}_${node_oid}`);
|
||||||
|
|
||||||
/* This will be needed for coll node */
|
/* This will be needed for coll node */
|
||||||
prev_node_id = node_oid;
|
prev_node_id = node_oid;
|
||||||
@ -447,7 +455,7 @@ export default class SearchObjectsDialogWrapper extends DialogWrapper {
|
|||||||
return `/${coll_node.label}/`;
|
return `/${coll_node.label}/`;
|
||||||
} else if(node_type in this.pgBrowser.Nodes) {
|
} else if(node_type in this.pgBrowser.Nodes) {
|
||||||
/* Add the node to the path */
|
/* Add the node to the path */
|
||||||
id_path.push(`${node_type}/${node_oid}`);
|
id_path.push(`${node_type}_${node_oid}`);
|
||||||
|
|
||||||
/* This will be need for coll node id path */
|
/* This will be need for coll node id path */
|
||||||
prev_node_id = node_oid;
|
prev_node_id = node_oid;
|
||||||
@ -652,7 +660,7 @@ export default class SearchObjectsDialogWrapper extends DialogWrapper {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.treeInfo = getTreeNodeHierarchyFromElement(this.pgBrowser, selectedTreeNode);
|
this.treeInfo = this.pgBrowser.tree.getTreeNodeHierarchy(selectedTreeNode);
|
||||||
this.prepareDialog();
|
this.prepareDialog();
|
||||||
this.focusOnDialog(this);
|
this.focusOnDialog(this);
|
||||||
}
|
}
|
||||||
|
@ -2720,26 +2720,20 @@ define('tools.querytool', [
|
|||||||
|
|
||||||
$('#btn-conn-status i').removeClass('obtaining-conn');
|
$('#btn-conn-status i').removeClass('obtaining-conn');
|
||||||
|
|
||||||
var tree_data = pgWindow.default.pgAdmin.Browser.treeMenu.translateTreeNodeIdFromACITree(pgWindow.default.pgAdmin.Browser.treeMenu.selected());
|
var tree_data = pgWindow.default.pgAdmin.Browser.tree.getTreeNodeHierarchy(pgWindow.default.pgAdmin.Browser.tree.selected());
|
||||||
|
let conn_title = panelTitleFunc.getPanelTitle(pgWindow.default.pgAdmin.Browser, null, null, null, true, tree_data.database.label);
|
||||||
var server_data = pgWindow.default.pgAdmin.Browser.treeMenu.findNode(tree_data.slice(0,2));
|
|
||||||
var database_data = pgWindow.default.pgAdmin.Browser.treeMenu.findNode(tree_data.slice(0,4));
|
|
||||||
var dbData = tree_data.slice(0,3);
|
|
||||||
dbData.push('database/' + url_params.did);
|
|
||||||
var dbName = pgWindow.default.pgAdmin.Browser.treeMenu.findNode(dbData).data.label;
|
|
||||||
let conn_title = panelTitleFunc.getPanelTitle(pgWindow.default.pgAdmin.Browser, null, null, null, true, dbName);
|
|
||||||
self.gridView.set_editor_title(_.unescape(conn_title));
|
self.gridView.set_editor_title(_.unescape(conn_title));
|
||||||
let connection_data = {
|
let connection_data = {
|
||||||
'server_group': self.gridView.handler.url_params.sgid,
|
'server_group': self.gridView.handler.url_params.sgid,
|
||||||
'server': self.gridView.handler.url_params.sid,
|
'server': self.gridView.handler.url_params.sid,
|
||||||
'database': self.gridView.handler.url_params.did,
|
'database': self.gridView.handler.url_params.did,
|
||||||
'user': server_data.data.user.name,
|
'user': tree_data.server.user.name,
|
||||||
'role': null,
|
'role': null,
|
||||||
'title': _.unescape(url_params.title),
|
'title': _.unescape(url_params.title),
|
||||||
'conn_title': _.unescape(conn_title),
|
'conn_title': _.unescape(conn_title),
|
||||||
'is_allow_new_connection': false,
|
'is_allow_new_connection': false,
|
||||||
'database_name': _.unescape(database_data.data.label),
|
'database_name': _.unescape(tree_data.database.label),
|
||||||
'server_name': _.unescape(server_data.data.label),
|
'server_name': _.unescape(tree_data.server.label),
|
||||||
'is_selected': true,
|
'is_selected': true,
|
||||||
};
|
};
|
||||||
delete connection_data.password;
|
delete connection_data.password;
|
||||||
@ -5171,10 +5165,10 @@ define('tools.querytool', [
|
|||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var selected_item = pgWindow.default.pgAdmin.Browser.treeMenu.selected(),
|
var selected_item = pgWindow.default.pgAdmin.Browser.tree.selected(),
|
||||||
tree_data = pgWindow.default.pgAdmin.Browser.treeMenu.translateTreeNodeIdFromACITree(selected_item),
|
tree_data = pgWindow.default.pgAdmin.Browser.tree.translateTreeNodeIdFromReactTree(selected_item),
|
||||||
server_data = pgWindow.default.pgAdmin.Browser.treeMenu.findNode(tree_data.slice(0,2)),
|
server_data = pgWindow.default.pgAdmin.Browser.tree.findNode(tree_data[1]),
|
||||||
database_data = pgWindow.default.pgAdmin.Browser.treeMenu.findNode(tree_data.slice(0,4)),
|
database_data = pgWindow.default.pgAdmin.Browser.tree.findNode(tree_data[3]),
|
||||||
db_name = database_data.data.label,
|
db_name = database_data.data.label,
|
||||||
db_did = database_data.data._id;
|
db_did = database_data.data._id;
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ describe('BackupDialog', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser = {
|
pgBrowser = {
|
||||||
treeMenu: new TreeFake(),
|
|
||||||
Nodes: {
|
Nodes: {
|
||||||
server: {
|
server: {
|
||||||
hasId: true,
|
hasId: true,
|
||||||
@ -53,6 +52,7 @@ describe('BackupDialog', () => {
|
|||||||
default: 550,
|
default: 550,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
pgBrowser.tree = new TreeFake(pgBrowser);
|
||||||
pgBrowser.Nodes.server.hasId = true;
|
pgBrowser.Nodes.server.hasId = true;
|
||||||
pgBrowser.Nodes.database.hasId = true;
|
pgBrowser.Nodes.database.hasId = true;
|
||||||
jquerySpy = jasmine.createSpy('jquerySpy');
|
jquerySpy = jasmine.createSpy('jquerySpy');
|
||||||
@ -126,7 +126,7 @@ describe('BackupDialog', () => {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
pgBrowser.treeMenu = TreeFake.build(hierarchy);
|
pgBrowser.tree = TreeFake.build(hierarchy, pgBrowser);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#draw', () => {
|
describe('#draw', () => {
|
||||||
@ -151,7 +151,7 @@ describe('BackupDialog', () => {
|
|||||||
|
|
||||||
context('there are no ancestors of the type server', () => {
|
context('there are no ancestors of the type server', () => {
|
||||||
it('does not create a dialog', () => {
|
it('does not create a dialog', () => {
|
||||||
pgBrowser.treeMenu.selectNode([{id: 'root'}]);
|
pgBrowser.tree.selectNode([{id: 'root'}]);
|
||||||
backupDialog.draw(null, null, null);
|
backupDialog.draw(null, null, null);
|
||||||
expect(alertifySpy['backup_objects']).not.toHaveBeenCalled();
|
expect(alertifySpy['backup_objects']).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
@ -12,7 +12,7 @@ import {BackupDialogWrapper} from '../../../pgadmin/tools/backup/static/js/backu
|
|||||||
import axios from 'axios/index';
|
import axios from 'axios/index';
|
||||||
import MockAdapter from 'axios-mock-adapter';
|
import MockAdapter from 'axios-mock-adapter';
|
||||||
import {FakeModel} from '../fake_model';
|
import {FakeModel} from '../fake_model';
|
||||||
import {TreeNode} from '../../../pgadmin/static/js/tree/tree';
|
import {TreeNode} from '../../../pgadmin/static/js/tree/tree_nodes';
|
||||||
|
|
||||||
let context = describe;
|
let context = describe;
|
||||||
|
|
||||||
@ -34,7 +34,6 @@ describe('BackupDialogWrapper', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser = {
|
pgBrowser = {
|
||||||
treeMenu: new TreeFake(),
|
|
||||||
Nodes: {
|
Nodes: {
|
||||||
server: {
|
server: {
|
||||||
hasId: true,
|
hasId: true,
|
||||||
@ -47,8 +46,10 @@ describe('BackupDialogWrapper', () => {
|
|||||||
keyboardNavigation: jasmine.createSpyObj('keyboardNavigation', ['getDialogTabNavigator']),
|
keyboardNavigation: jasmine.createSpyObj('keyboardNavigation', ['getDialogTabNavigator']),
|
||||||
};
|
};
|
||||||
|
|
||||||
noDataNode = pgBrowser.treeMenu.addNewNode('level1.1', undefined, [{id: 'level1'}]);
|
pgBrowser.tree = new TreeFake(pgBrowser);
|
||||||
serverTreeNode = pgBrowser.treeMenu.addNewNode('level2.1', {
|
|
||||||
|
noDataNode = pgBrowser.tree.addNewNode('level1.1', undefined, [{id: 'level1'}]);
|
||||||
|
serverTreeNode = pgBrowser.tree.addNewNode('level2.1', {
|
||||||
_type: 'server',
|
_type: 'server',
|
||||||
_id: 10,
|
_id: 10,
|
||||||
label: 'some-tree-label',
|
label: 'some-tree-label',
|
||||||
@ -57,7 +58,7 @@ describe('BackupDialogWrapper', () => {
|
|||||||
_type: 'database',
|
_type: 'database',
|
||||||
_label: 'some-database-label',
|
_label: 'some-database-label',
|
||||||
}, [{id: 'database-tree-node'}]);
|
}, [{id: 'database-tree-node'}]);
|
||||||
pgBrowser.treeMenu.addChild(serverTreeNode, databaseTreeNode);
|
pgBrowser.tree.addChild(serverTreeNode, databaseTreeNode);
|
||||||
|
|
||||||
jquerySpy = jasmine.createSpy('jquerySpy');
|
jquerySpy = jasmine.createSpy('jquerySpy');
|
||||||
backupNode = {
|
backupNode = {
|
||||||
@ -132,7 +133,7 @@ describe('BackupDialogWrapper', () => {
|
|||||||
|
|
||||||
context('selected tree node has no data', () => {
|
context('selected tree node has no data', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser.treeMenu.selectNode(noDataNode.domNode);
|
pgBrowser.tree.selectNode(noDataNode.domNode);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not create a backform dialog', () => {
|
it('does not create a backform dialog', () => {
|
||||||
@ -159,7 +160,7 @@ describe('BackupDialogWrapper', () => {
|
|||||||
label: 'some-tree-label',
|
label: 'some-tree-label',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
pgBrowser.treeMenu.selectNode(serverTreeNode.domNode);
|
pgBrowser.tree.selectNode(serverTreeNode.domNode);
|
||||||
pgBrowser.Nodes['server'].getTreeNodeHierarchy.and
|
pgBrowser.Nodes['server'].getTreeNodeHierarchy.and
|
||||||
.returnValue(treeHierarchyInformation);
|
.returnValue(treeHierarchyInformation);
|
||||||
dialogSpy = jasmine.createSpyObj('newView', ['render']);
|
dialogSpy = jasmine.createSpyObj('newView', ['render']);
|
||||||
@ -238,7 +239,7 @@ describe('BackupDialogWrapper', () => {
|
|||||||
networkCalled = true;
|
networkCalled = true;
|
||||||
return [200, {}];
|
return [200, {}];
|
||||||
});
|
});
|
||||||
pgBrowser.treeMenu.selectNode(serverTreeNode.domNode);
|
pgBrowser.tree.selectNode(serverTreeNode.domNode);
|
||||||
pgBrowser.showHelp = jasmine.createSpy('showHelp');
|
pgBrowser.showHelp = jasmine.createSpy('showHelp');
|
||||||
|
|
||||||
const event = {
|
const event = {
|
||||||
@ -278,7 +279,7 @@ describe('BackupDialogWrapper', () => {
|
|||||||
networkCalled = true;
|
networkCalled = true;
|
||||||
return [200, {}];
|
return [200, {}];
|
||||||
});
|
});
|
||||||
pgBrowser.treeMenu.selectNode(serverTreeNode.domNode);
|
pgBrowser.tree.selectNode(serverTreeNode.domNode);
|
||||||
pgBrowser.showHelp = jasmine.createSpy('showHelp');
|
pgBrowser.showHelp = jasmine.createSpy('showHelp');
|
||||||
|
|
||||||
const event = {
|
const event = {
|
||||||
@ -337,7 +338,7 @@ describe('BackupDialogWrapper', () => {
|
|||||||
|
|
||||||
context('tree node has no data', () => {
|
context('tree node has no data', () => {
|
||||||
it('does not start the backup', () => {
|
it('does not start the backup', () => {
|
||||||
pgBrowser.treeMenu.selectNode(noDataNode.domNode);
|
pgBrowser.tree.selectNode(noDataNode.domNode);
|
||||||
|
|
||||||
let networkCalled = false;
|
let networkCalled = false;
|
||||||
networkMock.onAny(/.*/).reply(() => {
|
networkMock.onAny(/.*/).reply(() => {
|
||||||
@ -365,7 +366,7 @@ describe('BackupDialogWrapper', () => {
|
|||||||
context('when dialog type is global', () => {
|
context('when dialog type is global', () => {
|
||||||
let event;
|
let event;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser.treeMenu.selectNode(serverTreeNode.domNode);
|
pgBrowser.tree.selectNode(serverTreeNode.domNode);
|
||||||
|
|
||||||
backupDialogWrapper.view = {
|
backupDialogWrapper.view = {
|
||||||
model: new FakeModel(),
|
model: new FakeModel(),
|
||||||
@ -465,7 +466,7 @@ describe('BackupDialogWrapper', () => {
|
|||||||
backform
|
backform
|
||||||
);
|
);
|
||||||
|
|
||||||
pgBrowser.treeMenu.selectNode(databaseTreeNode.domNode);
|
pgBrowser.tree.selectNode(databaseTreeNode.domNode);
|
||||||
|
|
||||||
backupDialogWrapper.view = {
|
backupDialogWrapper.view = {
|
||||||
model: new FakeModel(),
|
model: new FakeModel(),
|
||||||
|
@ -26,7 +26,6 @@ describe('GlobalServerBackupDialog', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser = {
|
pgBrowser = {
|
||||||
treeMenu: new TreeFake(),
|
|
||||||
Nodes: {
|
Nodes: {
|
||||||
server: jasmine.createSpyObj('Node[server]', ['getTreeNodeHierarchy']),
|
server: jasmine.createSpyObj('Node[server]', ['getTreeNodeHierarchy']),
|
||||||
},
|
},
|
||||||
@ -43,35 +42,36 @@ describe('GlobalServerBackupDialog', () => {
|
|||||||
default: 550,
|
default: 550,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
pgBrowser.tree = new TreeFake(pgBrowser);
|
||||||
pgBrowser.Nodes.server.hasId = true;
|
pgBrowser.Nodes.server.hasId = true;
|
||||||
jquerySpy = jasmine.createSpy('jquerySpy');
|
jquerySpy = jasmine.createSpy('jquerySpy');
|
||||||
backupModelSpy = jasmine.createSpy('backupModelSpy');
|
backupModelSpy = jasmine.createSpy('backupModelSpy');
|
||||||
|
|
||||||
rootNode = pgBrowser.treeMenu.addNewNode('level1', {}, undefined, []);
|
rootNode = pgBrowser.tree.addNewNode('level1', {}, undefined, []);
|
||||||
serverTreeNode = pgBrowser.treeMenu.addNewNode('level1.1', {
|
serverTreeNode = pgBrowser.tree.addNewNode('level1.1', {
|
||||||
_type: 'server',
|
_type: 'server',
|
||||||
_id: 10,
|
_id: 10,
|
||||||
server_type: 'pg',
|
server_type: 'pg',
|
||||||
version: 100000,
|
version: 100000,
|
||||||
}, undefined, ['level1']);
|
}, undefined, ['level1']);
|
||||||
serverTreeNodeWrongPath = pgBrowser.treeMenu.addNewNode('level1.2', {
|
serverTreeNodeWrongPath = pgBrowser.tree.addNewNode('level1.2', {
|
||||||
_type: 'server',
|
_type: 'server',
|
||||||
_id: 11,
|
_id: 11,
|
||||||
server_type: 'pg',
|
server_type: 'pg',
|
||||||
version: 90600,
|
version: 90600,
|
||||||
}, undefined, ['level1']);
|
}, undefined, ['level1']);
|
||||||
ppasServerTreeNode = pgBrowser.treeMenu.addNewNode('level1.3', {
|
ppasServerTreeNode = pgBrowser.tree.addNewNode('level1.3', {
|
||||||
_type: 'server',
|
_type: 'server',
|
||||||
server_type: 'ppas',
|
server_type: 'ppas',
|
||||||
version: 130000,
|
version: 130000,
|
||||||
}, undefined, ['level1']);
|
}, undefined, ['level1']);
|
||||||
ppasServerTreeNodeWrongPath = pgBrowser.treeMenu.addNewNode('level1.4', {
|
ppasServerTreeNodeWrongPath = pgBrowser.tree.addNewNode('level1.4', {
|
||||||
_type: 'server',
|
_type: 'server',
|
||||||
server_type: 'ppas',
|
server_type: 'ppas',
|
||||||
version: 90600,
|
version: 90600,
|
||||||
}, undefined, ['level1']);
|
}, undefined, ['level1']);
|
||||||
pgBrowser.treeMenu.addNewNode('level3', {}, undefined, ['level1', 'level1.2', 'level1.3', 'level1.4']);
|
pgBrowser.tree.addNewNode('level3', {}, undefined, ['level1', 'level1.2', 'level1.3', 'level1.4']);
|
||||||
pgBrowser.treeMenu.addNewNode('level3.1', undefined, undefined, ['level1', 'level1.2', 'level3']);
|
pgBrowser.tree.addNewNode('level3.1', undefined, undefined, ['level1', 'level1.2', 'level3']);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#draw', () => {
|
describe('#draw', () => {
|
||||||
@ -97,7 +97,7 @@ describe('GlobalServerBackupDialog', () => {
|
|||||||
|
|
||||||
context('there are no ancestors of the type server', () => {
|
context('there are no ancestors of the type server', () => {
|
||||||
it('does not create a dialog', () => {
|
it('does not create a dialog', () => {
|
||||||
pgBrowser.treeMenu.selectNode([{id: 'level1'}]);
|
pgBrowser.tree.selectNode([{id: 'level1'}]);
|
||||||
backupDialog.draw(null, null, null);
|
backupDialog.draw(null, null, null);
|
||||||
expect(alertifySpy['BackupDialog_globals']).not.toHaveBeenCalled();
|
expect(alertifySpy['BackupDialog_globals']).not.toHaveBeenCalled();
|
||||||
expect(alertifySpy['BackupDialog_server']).not.toHaveBeenCalled();
|
expect(alertifySpy['BackupDialog_server']).not.toHaveBeenCalled();
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
import {getPanelTitle} from '../../../pgadmin/tools/datagrid/static/js/datagrid_panel_title';
|
import {getPanelTitle} from '../../../pgadmin/tools/datagrid/static/js/datagrid_panel_title';
|
||||||
import {TreeFake} from '../tree/tree_fake';
|
import {TreeFake} from '../tree/tree_fake';
|
||||||
import {TreeNode} from '../../../pgadmin/static/js/tree/tree';
|
import {TreeNode} from '../../../pgadmin/static/js/tree/tree_nodes';
|
||||||
import {pgBrowser} from 'pgadmin.browser.preferences';
|
import {pgBrowser} from 'pgadmin.browser.preferences';
|
||||||
|
|
||||||
const context = describe;
|
const context = describe;
|
||||||
@ -28,7 +28,6 @@ describe('#getPanelTitle', () => {
|
|||||||
let tree;
|
let tree;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser.preferences_cache = dummy_cache;
|
pgBrowser.preferences_cache = dummy_cache;
|
||||||
tree = new TreeFake();
|
|
||||||
pgBrowser.Nodes = {
|
pgBrowser.Nodes = {
|
||||||
server: {
|
server: {
|
||||||
hasId: true,
|
hasId: true,
|
||||||
@ -39,10 +38,11 @@ describe('#getPanelTitle', () => {
|
|||||||
_type: 'database',
|
_type: 'database',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
pgBrowser.treeMenu = tree;
|
|
||||||
pgBrowser.preferences = {
|
pgBrowser.preferences = {
|
||||||
'qt_tab_title_placeholder': '',
|
'qt_tab_title_placeholder': '',
|
||||||
};
|
};
|
||||||
|
tree = new TreeFake(pgBrowser);
|
||||||
|
pgBrowser.tree = tree;
|
||||||
});
|
});
|
||||||
|
|
||||||
context('selected node does not belong to a server', () => {
|
context('selected node does not belong to a server', () => {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
import {showDataGrid} from '../../../pgadmin/tools/datagrid/static/js/show_data';
|
import {showDataGrid} from '../../../pgadmin/tools/datagrid/static/js/show_data';
|
||||||
import {TreeFake} from '../tree/tree_fake';
|
import {TreeFake} from '../tree/tree_fake';
|
||||||
import {TreeNode} from '../../../pgadmin/static/js/tree/tree';
|
import {TreeNode} from '../../../pgadmin/static/js/tree/tree_nodes';
|
||||||
import {pgBrowser} from 'pgadmin.browser.preferences';
|
import {pgBrowser} from 'pgadmin.browser.preferences';
|
||||||
|
|
||||||
const context = describe;
|
const context = describe;
|
||||||
@ -34,7 +34,6 @@ describe('#show_data', () => {
|
|||||||
datagrid = {
|
datagrid = {
|
||||||
launch_grid: jasmine.createSpy('launch_grid'),
|
launch_grid: jasmine.createSpy('launch_grid'),
|
||||||
};
|
};
|
||||||
pgBrowser.treeMenu = new TreeFake();
|
|
||||||
pgBrowser.Nodes = {
|
pgBrowser.Nodes = {
|
||||||
server_group: {
|
server_group: {
|
||||||
_type: 'server_group',
|
_type: 'server_group',
|
||||||
@ -61,12 +60,13 @@ describe('#show_data', () => {
|
|||||||
hasId: true,
|
hasId: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const parent = pgBrowser.treeMenu.addNewNode('parent', {_type: 'parent'}, []);
|
pgBrowser.tree = new TreeFake(pgBrowser);
|
||||||
|
const parent = pgBrowser.tree.addNewNode('parent', {_type: 'parent'}, []);
|
||||||
const serverGroup1 = new TreeNode('server_group1', {
|
const serverGroup1 = new TreeNode('server_group1', {
|
||||||
_type: 'server_group',
|
_type: 'server_group',
|
||||||
_id: 1,
|
_id: 1,
|
||||||
});
|
});
|
||||||
pgBrowser.treeMenu.addChild(parent, serverGroup1);
|
pgBrowser.tree.addChild(parent, serverGroup1);
|
||||||
|
|
||||||
const server1 = new TreeNode('server1', {
|
const server1 = new TreeNode('server1', {
|
||||||
_type: 'server',
|
_type: 'server',
|
||||||
@ -75,35 +75,35 @@ describe('#show_data', () => {
|
|||||||
_id: 2,
|
_id: 2,
|
||||||
user: {name: 'someuser'},
|
user: {name: 'someuser'},
|
||||||
}, ['parent', 'server_group1']);
|
}, ['parent', 'server_group1']);
|
||||||
pgBrowser.treeMenu.addChild(serverGroup1, server1);
|
pgBrowser.tree.addChild(serverGroup1, server1);
|
||||||
|
|
||||||
const database1 = new TreeNode('database1', {
|
const database1 = new TreeNode('database1', {
|
||||||
_type: 'database',
|
_type: 'database',
|
||||||
label: 'database1',
|
label: 'database1',
|
||||||
_id: 3,
|
_id: 3,
|
||||||
}, ['parent', 'server_group1', 'server1']);
|
}, ['parent', 'server_group1', 'server1']);
|
||||||
pgBrowser.treeMenu.addChild(server1, database1);
|
pgBrowser.tree.addChild(server1, database1);
|
||||||
|
|
||||||
const schema1 = new TreeNode('schema1', {
|
const schema1 = new TreeNode('schema1', {
|
||||||
_type: 'schema',
|
_type: 'schema',
|
||||||
label: 'schema1',
|
label: 'schema1',
|
||||||
_id: 4,
|
_id: 4,
|
||||||
});
|
});
|
||||||
pgBrowser.treeMenu.addChild(database1, schema1);
|
pgBrowser.tree.addChild(database1, schema1);
|
||||||
|
|
||||||
const view1 = new TreeNode('view1', {
|
const view1 = new TreeNode('view1', {
|
||||||
_type: 'view',
|
_type: 'view',
|
||||||
label: 'view1',
|
label: 'view1',
|
||||||
_id: 5,
|
_id: 5,
|
||||||
}, ['parent', 'server_group1', 'server1', 'database1']);
|
}, ['parent', 'server_group1', 'server1', 'database1']);
|
||||||
pgBrowser.treeMenu.addChild(database1, view1);
|
pgBrowser.tree.addChild(database1, view1);
|
||||||
|
|
||||||
const catalog1 = new TreeNode('catalog1', {
|
const catalog1 = new TreeNode('catalog1', {
|
||||||
_type: 'catalog',
|
_type: 'catalog',
|
||||||
label: 'catalog1',
|
label: 'catalog1',
|
||||||
_id: 6,
|
_id: 6,
|
||||||
}, ['parent', 'server_group1', 'server1', 'database1']);
|
}, ['parent', 'server_group1', 'server1', 'database1']);
|
||||||
pgBrowser.treeMenu.addChild(database1, catalog1);
|
pgBrowser.tree.addChild(database1, catalog1);
|
||||||
});
|
});
|
||||||
|
|
||||||
context('cannot find the tree node', () => {
|
context('cannot find the tree node', () => {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
import {TreeFake} from '../tree/tree_fake';
|
import {TreeFake} from '../tree/tree_fake';
|
||||||
import {showQueryTool} from '../../../pgadmin/tools/datagrid/static/js/show_query_tool';
|
import {showQueryTool} from '../../../pgadmin/tools/datagrid/static/js/show_query_tool';
|
||||||
import {TreeNode} from '../../../pgadmin/static/js/tree/tree';
|
import {TreeNode} from '../../../pgadmin/static/js/tree/tree_nodes';
|
||||||
import {pgBrowser} from 'pgadmin.browser.preferences';
|
import {pgBrowser} from 'pgadmin.browser.preferences';
|
||||||
|
|
||||||
const context = describe;
|
const context = describe;
|
||||||
@ -34,7 +34,6 @@ describe('#showQueryTool', () => {
|
|||||||
queryTool = {
|
queryTool = {
|
||||||
launch_grid: jasmine.createSpy('launch_grid'),
|
launch_grid: jasmine.createSpy('launch_grid'),
|
||||||
};
|
};
|
||||||
pgBrowser.treeMenu = new TreeFake();
|
|
||||||
pgBrowser.Nodes = {
|
pgBrowser.Nodes = {
|
||||||
server_group: {
|
server_group: {
|
||||||
_type: 'server_group',
|
_type: 'server_group',
|
||||||
@ -49,13 +48,14 @@ describe('#showQueryTool', () => {
|
|||||||
hasId: true,
|
hasId: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
pgBrowser.tree = new TreeFake(pgBrowser);
|
||||||
|
|
||||||
const parent = pgBrowser.treeMenu.addNewNode('parent', {_type: 'parent'});
|
const parent = pgBrowser.tree.addNewNode('parent', {_type: 'parent'});
|
||||||
const serverGroup1 = new TreeNode('server_group1', {
|
const serverGroup1 = new TreeNode('server_group1', {
|
||||||
_type: 'server_group',
|
_type: 'server_group',
|
||||||
_id: 1,
|
_id: 1,
|
||||||
}, ['parent']);
|
}, ['parent']);
|
||||||
pgBrowser.treeMenu.addChild(parent, serverGroup1);
|
pgBrowser.tree.addChild(parent, serverGroup1);
|
||||||
|
|
||||||
const server1 = new TreeNode('server1', {
|
const server1 = new TreeNode('server1', {
|
||||||
_type: 'server',
|
_type: 'server',
|
||||||
@ -65,14 +65,14 @@ describe('#showQueryTool', () => {
|
|||||||
user: {name: 'someuser'},
|
user: {name: 'someuser'},
|
||||||
db: 'otherdblabel',
|
db: 'otherdblabel',
|
||||||
});
|
});
|
||||||
pgBrowser.treeMenu.addChild(serverGroup1, server1);
|
pgBrowser.tree.addChild(serverGroup1, server1);
|
||||||
|
|
||||||
const database1 = new TreeNode('database1', {
|
const database1 = new TreeNode('database1', {
|
||||||
_type: 'database',
|
_type: 'database',
|
||||||
label: 'database1',
|
label: 'database1',
|
||||||
_id: 3,
|
_id: 3,
|
||||||
});
|
});
|
||||||
pgBrowser.treeMenu.addChild(server1, database1);
|
pgBrowser.tree.addChild(server1, database1);
|
||||||
});
|
});
|
||||||
|
|
||||||
context('cannot find the tree node', () => {
|
context('cannot find the tree node', () => {
|
||||||
|
@ -15,7 +15,7 @@ describe('#nodeHasStatistics', () => {
|
|||||||
const node = {
|
const node = {
|
||||||
hasStatistics: true,
|
hasStatistics: true,
|
||||||
};
|
};
|
||||||
expect(nodeHasStatistics(node, {})).toEqual(true);
|
expect(nodeHasStatistics({}, node, {})).toEqual(true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -24,12 +24,16 @@ describe('#nodeHasStatistics', () => {
|
|||||||
it('returns true', () => {
|
it('returns true', () => {
|
||||||
const node = {
|
const node = {
|
||||||
hasStatistics: () => true,
|
hasStatistics: () => true,
|
||||||
getTreeNodeHierarchy: jasmine.createSpy(),
|
};
|
||||||
|
const pgBrowser = {
|
||||||
|
tree: {
|
||||||
|
getTreeNodeHierarchy: jasmine.createSpy(),
|
||||||
|
}
|
||||||
};
|
};
|
||||||
const item = {};
|
const item = {};
|
||||||
|
|
||||||
expect(nodeHasStatistics(node, item)).toEqual(true);
|
expect(nodeHasStatistics(pgBrowser, node, item)).toEqual(true);
|
||||||
expect(node.getTreeNodeHierarchy).toHaveBeenCalledWith(item);
|
expect(pgBrowser.tree.getTreeNodeHierarchy).toHaveBeenCalledWith(item);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -10,13 +10,14 @@
|
|||||||
import {
|
import {
|
||||||
isTreeItemOfChildOfSchema, childCreateMenuEnabled,
|
isTreeItemOfChildOfSchema, childCreateMenuEnabled,
|
||||||
} from 'pgadmin.schema.dir/schema_child_tree_node';
|
} from 'pgadmin.schema.dir/schema_child_tree_node';
|
||||||
|
import pgAdmin from 'sources/pgadmin';
|
||||||
import * as pgBrowser from 'pgbrowser/browser';
|
|
||||||
import {TreeFake} from '../../tree/tree_fake';
|
import {TreeFake} from '../../tree/tree_fake';
|
||||||
|
|
||||||
|
|
||||||
describe('#childCreateMenuEnabled', () => {
|
describe('#childCreateMenuEnabled', () => {
|
||||||
let data;
|
let data,
|
||||||
let tree;
|
tree,
|
||||||
|
pgBrowser = pgAdmin.Browser;
|
||||||
|
|
||||||
describe(' - when data is not null', () => {
|
describe(' - when data is not null', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@ -47,8 +48,8 @@ describe('#childCreateMenuEnabled', () => {
|
|||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
|
||||||
tree = TreeFake.build(hierarchy);
|
tree = TreeFake.build(hierarchy, pgBrowser);
|
||||||
pgBrowser.treeMenu = tree;
|
pgBrowser.tree = tree;
|
||||||
});
|
});
|
||||||
it(' it is true', () => {
|
it(' it is true', () => {
|
||||||
expect(childCreateMenuEnabled(
|
expect(childCreateMenuEnabled(
|
||||||
@ -72,8 +73,8 @@ describe('#childCreateMenuEnabled', () => {
|
|||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
|
||||||
tree = TreeFake.build(hierarchy);
|
tree = TreeFake.build(hierarchy, pgBrowser);
|
||||||
pgBrowser.treeMenu = tree;
|
pgBrowser.tree = tree;
|
||||||
});
|
});
|
||||||
|
|
||||||
it(' it is true', () => {
|
it(' it is true', () => {
|
||||||
@ -101,8 +102,8 @@ describe('#childCreateMenuEnabled', () => {
|
|||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
|
||||||
tree = TreeFake.build(hierarchy);
|
tree = TreeFake.build(hierarchy, pgBrowser);
|
||||||
pgBrowser.treeMenu = tree;
|
pgBrowser.tree = tree;
|
||||||
});
|
});
|
||||||
|
|
||||||
it(' it is true', () => {
|
it(' it is true', () => {
|
||||||
@ -122,8 +123,8 @@ describe('#childCreateMenuEnabled', () => {
|
|||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
|
||||||
tree = TreeFake.build(hierarchy);
|
tree = TreeFake.build(hierarchy, pgBrowser);
|
||||||
pgBrowser.treeMenu = tree;
|
pgBrowser.tree = tree;
|
||||||
});
|
});
|
||||||
it(' it is false', () => {
|
it(' it is false', () => {
|
||||||
expect(
|
expect(
|
||||||
@ -146,8 +147,8 @@ describe('#childCreateMenuEnabled', () => {
|
|||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
|
||||||
tree = TreeFake.build(hierarchy);
|
tree = TreeFake.build(hierarchy, pgBrowser);
|
||||||
pgBrowser.treeMenu = tree;
|
pgBrowser.tree = tree;
|
||||||
});
|
});
|
||||||
|
|
||||||
it(' it is false', () => {
|
it(' it is false', () => {
|
||||||
@ -175,8 +176,8 @@ describe('#childCreateMenuEnabled', () => {
|
|||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
|
||||||
tree = TreeFake.build(hierarchy);
|
tree = TreeFake.build(hierarchy, pgBrowser);
|
||||||
pgBrowser.treeMenu = tree;
|
pgBrowser.tree = tree;
|
||||||
});
|
});
|
||||||
|
|
||||||
it(' it is false', () => {
|
it(' it is false', () => {
|
||||||
@ -191,7 +192,9 @@ describe('#childCreateMenuEnabled', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('#childDropMenuEnabled', () => {
|
describe('#childDropMenuEnabled', () => {
|
||||||
let tree;
|
let tree,
|
||||||
|
pgBrowser = pgAdmin.Browser;
|
||||||
|
|
||||||
|
|
||||||
describe(' - the child node under schema node ', () => {
|
describe(' - the child node under schema node ', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@ -211,8 +214,8 @@ describe('#childDropMenuEnabled', () => {
|
|||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
|
||||||
tree = TreeFake.build(hierarchy);
|
tree = TreeFake.build(hierarchy, pgBrowser);
|
||||||
pgBrowser.treeMenu = tree;
|
pgBrowser.tree = tree;
|
||||||
});
|
});
|
||||||
|
|
||||||
it(' it is true', () => {
|
it(' it is true', () => {
|
||||||
@ -240,8 +243,8 @@ describe('#childDropMenuEnabled', () => {
|
|||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
|
||||||
tree = TreeFake.build(hierarchy);
|
tree = TreeFake.build(hierarchy, pgBrowser);
|
||||||
pgBrowser.treeMenu = tree;
|
pgBrowser.tree = tree;
|
||||||
});
|
});
|
||||||
|
|
||||||
it(' it is false', () => {
|
it(' it is false', () => {
|
||||||
|
@ -22,7 +22,7 @@ describe('RestoreDialog', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser = {
|
pgBrowser = {
|
||||||
treeMenu: new TreeFake(),
|
tree: new TreeFake(),
|
||||||
Nodes: {
|
Nodes: {
|
||||||
server: jasmine.createSpyObj('Node[server]', ['getTreeNodeHierarchy']),
|
server: jasmine.createSpyObj('Node[server]', ['getTreeNodeHierarchy']),
|
||||||
database: jasmine.createSpyObj('Node[database]', ['getTreeNodeHierarchy']),
|
database: jasmine.createSpyObj('Node[database]', ['getTreeNodeHierarchy']),
|
||||||
@ -113,7 +113,7 @@ describe('RestoreDialog', () => {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
pgBrowser.treeMenu = TreeFake.build(hierarchy);
|
pgBrowser.tree = TreeFake.build(hierarchy, pgBrowser);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#draw', () => {
|
describe('#draw', () => {
|
||||||
@ -138,7 +138,7 @@ describe('RestoreDialog', () => {
|
|||||||
|
|
||||||
context('there are no ancestors of the type server', () => {
|
context('there are no ancestors of the type server', () => {
|
||||||
it('does not create a dialog', () => {
|
it('does not create a dialog', () => {
|
||||||
pgBrowser.treeMenu.selectNode([{id: 'root'}]);
|
pgBrowser.tree.selectNode([{id: 'root'}]);
|
||||||
restoreDialog.draw(null, null, null);
|
restoreDialog.draw(null, null, null);
|
||||||
expect(alertifySpy['pg_restore']).not.toHaveBeenCalled();
|
expect(alertifySpy['pg_restore']).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
@ -11,7 +11,7 @@ import {RestoreDialogWrapper} from '../../../pgadmin/tools/restore/static/js/res
|
|||||||
import MockAdapter from 'axios-mock-adapter';
|
import MockAdapter from 'axios-mock-adapter';
|
||||||
import axios from 'axios/index';
|
import axios from 'axios/index';
|
||||||
import {FakeModel} from '../fake_model';
|
import {FakeModel} from '../fake_model';
|
||||||
import {TreeNode} from '../../../pgadmin/static/js/tree/tree';
|
import {TreeNode} from '../../../pgadmin/static/js/tree/tree_nodes';
|
||||||
|
|
||||||
let context = describe;
|
let context = describe;
|
||||||
|
|
||||||
@ -32,7 +32,6 @@ describe('RestoreDialogWrapper', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser = {
|
pgBrowser = {
|
||||||
treeMenu: new TreeFake(),
|
|
||||||
Nodes: {
|
Nodes: {
|
||||||
server: {
|
server: {
|
||||||
hasId: true,
|
hasId: true,
|
||||||
@ -41,9 +40,10 @@ describe('RestoreDialogWrapper', () => {
|
|||||||
},
|
},
|
||||||
keyboardNavigation: jasmine.createSpyObj('keyboardNavigation', ['getDialogTabNavigator']),
|
keyboardNavigation: jasmine.createSpyObj('keyboardNavigation', ['getDialogTabNavigator']),
|
||||||
};
|
};
|
||||||
|
pgBrowser.tree = new TreeFake(pgBrowser);
|
||||||
|
|
||||||
noDataNode = pgBrowser.treeMenu.addNewNode('level1.1', undefined, [{id: 'level1'}]);
|
noDataNode = pgBrowser.tree.addNewNode('level1.1', undefined, [{id: 'level1'}]);
|
||||||
serverTreeNode = pgBrowser.treeMenu.addNewNode('level2.1', {
|
serverTreeNode = pgBrowser.tree.addNewNode('level2.1', {
|
||||||
_type: 'server',
|
_type: 'server',
|
||||||
_id: 10,
|
_id: 10,
|
||||||
label: 'some-tree-label',
|
label: 'some-tree-label',
|
||||||
@ -123,7 +123,7 @@ describe('RestoreDialogWrapper', () => {
|
|||||||
|
|
||||||
context('selected tree node has no data', () => {
|
context('selected tree node has no data', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser.treeMenu.selectNode(noDataNode.domNode);
|
pgBrowser.tree.selectNode(noDataNode.domNode);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not create a backform dialog', () => {
|
it('does not create a backform dialog', () => {
|
||||||
@ -149,7 +149,7 @@ describe('RestoreDialogWrapper', () => {
|
|||||||
label: 'some-tree-label',
|
label: 'some-tree-label',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
pgBrowser.treeMenu.selectNode(serverTreeNode.domNode);
|
pgBrowser.tree.selectNode(serverTreeNode.domNode);
|
||||||
pgBrowser.Nodes['server'].getTreeNodeHierarchy.and
|
pgBrowser.Nodes['server'].getTreeNodeHierarchy.and
|
||||||
.returnValue(treeHierarchyInformation);
|
.returnValue(treeHierarchyInformation);
|
||||||
dialogSpy = jasmine.createSpyObj('newView', ['render']);
|
dialogSpy = jasmine.createSpyObj('newView', ['render']);
|
||||||
@ -226,7 +226,7 @@ describe('RestoreDialogWrapper', () => {
|
|||||||
let networkCalled;
|
let networkCalled;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
networkCalled = false;
|
networkCalled = false;
|
||||||
pgBrowser.treeMenu.selectNode(serverTreeNode.domNode);
|
pgBrowser.tree.selectNode(serverTreeNode.domNode);
|
||||||
networkMock.onAny(/.+/).reply(() => {
|
networkMock.onAny(/.+/).reply(() => {
|
||||||
networkCalled = true;
|
networkCalled = true;
|
||||||
return [200, {}];
|
return [200, {}];
|
||||||
@ -267,7 +267,7 @@ describe('RestoreDialogWrapper', () => {
|
|||||||
let networkCalled;
|
let networkCalled;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
networkCalled = false;
|
networkCalled = false;
|
||||||
pgBrowser.treeMenu.selectNode(serverTreeNode.domNode);
|
pgBrowser.tree.selectNode(serverTreeNode.domNode);
|
||||||
networkMock.onAny(/.+/).reply(() => {
|
networkMock.onAny(/.+/).reply(() => {
|
||||||
networkCalled = true;
|
networkCalled = true;
|
||||||
return [200, {}];
|
return [200, {}];
|
||||||
@ -350,7 +350,7 @@ describe('RestoreDialogWrapper', () => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
pgBrowser.treeMenu.selectNode(noDataNode.domNode);
|
pgBrowser.tree.selectNode(noDataNode.domNode);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not start the restore', () => {
|
it('does not start the restore', () => {
|
||||||
@ -364,12 +364,12 @@ describe('RestoreDialogWrapper', () => {
|
|||||||
let databaseTreeNode;
|
let databaseTreeNode;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
databaseTreeNode = pgBrowser.treeMenu.addNewNode('level3.1', {
|
databaseTreeNode = pgBrowser.tree.addNewNode('level3.1', {
|
||||||
_type: 'database',
|
_type: 'database',
|
||||||
_id: 10,
|
_id: 10,
|
||||||
_label: 'some-database-label',
|
_label: 'some-database-label',
|
||||||
}, [{id: 'level3.1'}]);
|
}, [{id: 'level3.1'}]);
|
||||||
pgBrowser.treeMenu.addChild(serverTreeNode, databaseTreeNode);
|
pgBrowser.tree.addChild(serverTreeNode, databaseTreeNode);
|
||||||
pgBrowser.Nodes.database = {
|
pgBrowser.Nodes.database = {
|
||||||
hasId: true,
|
hasId: true,
|
||||||
_label: 'some-database-label',
|
_label: 'some-database-label',
|
||||||
@ -379,7 +379,7 @@ describe('RestoreDialogWrapper', () => {
|
|||||||
restoreDialogWrapper.view = {
|
restoreDialogWrapper.view = {
|
||||||
model: fakeModel,
|
model: fakeModel,
|
||||||
};
|
};
|
||||||
pgBrowser.treeMenu.selectNode(databaseTreeNode.domNode);
|
pgBrowser.tree.selectNode(databaseTreeNode.domNode);
|
||||||
pgBrowser.Events = jasmine.createSpyObj('pgBrowserEventsSpy', ['trigger']);
|
pgBrowser.Events = jasmine.createSpyObj('pgBrowserEventsSpy', ['trigger']);
|
||||||
event = {
|
event = {
|
||||||
button: {
|
button: {
|
||||||
|
@ -32,7 +32,6 @@ describe('SearchObjectsDialog', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser.preferences_cache = dummy_cache;
|
pgBrowser.preferences_cache = dummy_cache;
|
||||||
pgBrowser.treeMenu = new TreeFake();
|
|
||||||
pgBrowser.Nodes = {
|
pgBrowser.Nodes = {
|
||||||
server: {
|
server: {
|
||||||
hasId: true,
|
hasId: true,
|
||||||
@ -50,7 +49,7 @@ describe('SearchObjectsDialog', () => {
|
|||||||
getTreeNodeHierarchy: jasmine.createSpy('db.getTreeNodeHierarchy'),
|
getTreeNodeHierarchy: jasmine.createSpy('db.getTreeNodeHierarchy'),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
pgBrowser.tree = new TreeFake(pgBrowser);
|
||||||
pgBrowser.stdW = {
|
pgBrowser.stdW = {
|
||||||
sm: 500,
|
sm: 500,
|
||||||
md: 700,
|
md: 700,
|
||||||
@ -108,7 +107,7 @@ describe('SearchObjectsDialog', () => {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
pgBrowser.treeMenu = TreeFake.build(hierarchy);
|
pgBrowser.tree = TreeFake.build(hierarchy, pgBrowser);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#draw', () => {
|
describe('#draw', () => {
|
||||||
@ -137,7 +136,7 @@ describe('SearchObjectsDialog', () => {
|
|||||||
|
|
||||||
context('there are no ancestors of the type database', () => {
|
context('there are no ancestors of the type database', () => {
|
||||||
it('does not create a dialog', () => {
|
it('does not create a dialog', () => {
|
||||||
pgBrowser.treeMenu.selectNode([{id: 'serverTreeNode'}]);
|
pgBrowser.tree.selectNode([{id: 'serverTreeNode'}]);
|
||||||
soDialog.draw(null, null, null);
|
soDialog.draw(null, null, null);
|
||||||
expect(alertifySpy['search_objects']).not.toHaveBeenCalled();
|
expect(alertifySpy['search_objects']).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
@ -11,7 +11,7 @@ import {TreeFake} from '../tree/tree_fake';
|
|||||||
import SearchObjectsDialogWrapper from 'tools/search_objects/static/js/search_objects_dialog_wrapper';
|
import SearchObjectsDialogWrapper from 'tools/search_objects/static/js/search_objects_dialog_wrapper';
|
||||||
import axios from 'axios/index';
|
import axios from 'axios/index';
|
||||||
import MockAdapter from 'axios-mock-adapter';
|
import MockAdapter from 'axios-mock-adapter';
|
||||||
import {TreeNode} from '../../../pgadmin/static/js/tree/tree';
|
import {TreeNode} from '../../../pgadmin/static/js/tree/tree_nodes';
|
||||||
|
|
||||||
let context = describe;
|
let context = describe;
|
||||||
|
|
||||||
@ -32,7 +32,6 @@ describe('SearchObjectsDialogWrapper', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser = {
|
pgBrowser = {
|
||||||
treeMenu: new TreeFake(),
|
|
||||||
Nodes: {
|
Nodes: {
|
||||||
server: {
|
server: {
|
||||||
hasId: true,
|
hasId: true,
|
||||||
@ -74,8 +73,9 @@ describe('SearchObjectsDialogWrapper', () => {
|
|||||||
},
|
},
|
||||||
keyboardNavigation: jasmine.createSpyObj('keyboardNavigation', ['getDialogTabNavigator']),
|
keyboardNavigation: jasmine.createSpyObj('keyboardNavigation', ['getDialogTabNavigator']),
|
||||||
};
|
};
|
||||||
noDataNode = pgBrowser.treeMenu.addNewNode('level1.1', undefined, [{id: 'level1'}]);
|
pgBrowser.tree = new TreeFake(pgBrowser),
|
||||||
serverTreeNode = pgBrowser.treeMenu.addNewNode('level2.1', {
|
noDataNode = pgBrowser.tree.addNewNode('level1.1', undefined, [{id: 'level1'}]);
|
||||||
|
serverTreeNode = pgBrowser.tree.addNewNode('level2.1', {
|
||||||
_type: 'server',
|
_type: 'server',
|
||||||
_id: 10,
|
_id: 10,
|
||||||
label: 'some-tree-label',
|
label: 'some-tree-label',
|
||||||
@ -85,7 +85,7 @@ describe('SearchObjectsDialogWrapper', () => {
|
|||||||
_id: 123,
|
_id: 123,
|
||||||
_label: 'some-database-label',
|
_label: 'some-database-label',
|
||||||
}, [{id: 'database-tree-node'}]);
|
}, [{id: 'database-tree-node'}]);
|
||||||
pgBrowser.treeMenu.addChild(serverTreeNode, databaseTreeNode);
|
pgBrowser.tree.addChild(serverTreeNode, databaseTreeNode);
|
||||||
|
|
||||||
jquerySpy = jasmine.createSpy('jquerySpy');
|
jquerySpy = jasmine.createSpy('jquerySpy');
|
||||||
soNode = {
|
soNode = {
|
||||||
@ -153,7 +153,7 @@ describe('SearchObjectsDialogWrapper', () => {
|
|||||||
|
|
||||||
context('selected tree node has no data', () => {
|
context('selected tree node has no data', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser.treeMenu.selectNode(noDataNode.domNode);
|
pgBrowser.tree.selectNode(noDataNode.domNode);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not prepare the dialog', () => {
|
it('does not prepare the dialog', () => {
|
||||||
@ -168,7 +168,7 @@ describe('SearchObjectsDialogWrapper', () => {
|
|||||||
let networkMock;
|
let networkMock;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
pgBrowser.treeMenu.selectNode(databaseTreeNode.domNode);
|
pgBrowser.tree.selectNode(databaseTreeNode.domNode);
|
||||||
soDialogWrapper.grid = jasmine.createSpyObj('grid', ['destroy']);
|
soDialogWrapper.grid = jasmine.createSpyObj('grid', ['destroy']);
|
||||||
spyOn(soDialogWrapper, 'showMessage');
|
spyOn(soDialogWrapper, 'showMessage');
|
||||||
gridDestroySpy = spyOn(soDialogWrapper.grid, 'destroy');
|
gridDestroySpy = spyOn(soDialogWrapper.grid, 'destroy');
|
||||||
@ -503,9 +503,9 @@ describe('SearchObjectsDialogWrapper', () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
soDialogWrapper.treeInfo = {
|
soDialogWrapper.treeInfo = {
|
||||||
'server_group': {'id': 'server_group/1', '_id': 1},
|
'server_group': {'id': 'server_group_1', '_id': 1},
|
||||||
'server': {'id': 'server/3', '_id': 3},
|
'server': {'id': 'server_3', '_id': 3},
|
||||||
'database': {'id': 'database/18456', '_id': 18456},
|
'database': {'id': 'database_18456', '_id': 18456},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
it('regular schema', ()=>{
|
it('regular schema', ()=>{
|
||||||
@ -515,7 +515,7 @@ describe('SearchObjectsDialogWrapper', () => {
|
|||||||
let retVal = soDialogWrapper.translateSearchObjectsPath(path, catalog_level);
|
let retVal = soDialogWrapper.translateSearchObjectsPath(path, catalog_level);
|
||||||
expect(retVal).toEqual([
|
expect(retVal).toEqual([
|
||||||
'Schemas/test_db/Tables/sampletab',
|
'Schemas/test_db/Tables/sampletab',
|
||||||
['server_group/1','server/3','coll-database/3','database/18456','coll-schema/18456','schema/2200','coll-table/2200','table/2604'],
|
['server_group_1','server_3','coll-database_3','database_18456','coll-schema_18456','schema_2200','coll-table_2200','table_2604'],
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -527,7 +527,7 @@ describe('SearchObjectsDialogWrapper', () => {
|
|||||||
let retVal = soDialogWrapper.translateSearchObjectsPath(path, catalog_level);
|
let retVal = soDialogWrapper.translateSearchObjectsPath(path, catalog_level);
|
||||||
expect(retVal).toEqual([
|
expect(retVal).toEqual([
|
||||||
'Catalogs/PostgreSQL Catalog (pg_catalog)/Tables/pg_class',
|
'Catalogs/PostgreSQL Catalog (pg_catalog)/Tables/pg_class',
|
||||||
['server_group/1','server/3','coll-database/3','database/18456','coll-catalog/18456','catalog/11','coll-table/11','table/2604'],
|
['server_group_1','server_3','coll-database_3','database_18456','coll-catalog_18456','catalog_11','coll-table_11','table_2604'],
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -538,7 +538,7 @@ describe('SearchObjectsDialogWrapper', () => {
|
|||||||
let retVal = soDialogWrapper.translateSearchObjectsPath(path, catalog_level);
|
let retVal = soDialogWrapper.translateSearchObjectsPath(path, catalog_level);
|
||||||
expect(retVal).toEqual([
|
expect(retVal).toEqual([
|
||||||
'Catalogs/ANSI (information_schema)/Catalog Objects/attributes',
|
'Catalogs/ANSI (information_schema)/Catalog Objects/attributes',
|
||||||
['server_group/1','server/3','coll-database/3','database/18456','coll-catalog/18456','catalog/11','coll-catalog_object/11','catalog_object/2604'],
|
['server_group_1','server_3','coll-database_3','database_18456','coll-catalog_18456','catalog_11','coll-catalog_object_11','catalog_object_2604'],
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -14,7 +14,7 @@ import {
|
|||||||
disableTriggers,
|
disableTriggers,
|
||||||
} from '../../../pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/enable_disable_triggers';
|
} from '../../../pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/enable_disable_triggers';
|
||||||
import {TreeFake} from '../tree/tree_fake';
|
import {TreeFake} from '../tree/tree_fake';
|
||||||
import {TreeNode} from '../../../pgadmin/static/js/tree/tree';
|
import {TreeNode} from '../../../pgadmin/static/js/tree/tree_nodes';
|
||||||
|
|
||||||
describe('#enableTriggers', () => {
|
describe('#enableTriggers', () => {
|
||||||
let networkMock;
|
let networkMock;
|
||||||
@ -24,6 +24,13 @@ describe('#enableTriggers', () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
networkMock = new MockAdapter(axios);
|
networkMock = new MockAdapter(axios);
|
||||||
tree = new TreeFake();
|
tree = new TreeFake();
|
||||||
|
|
||||||
|
spyOn(tree, 'unload').and.callFake(function() {
|
||||||
|
return new Promise((resolve)=>{
|
||||||
|
resolve('Success!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
const server1 = tree.addNewNode('server1', {_id: 1}, ['<li>server1</li>']);
|
const server1 = tree.addNewNode('server1', {_id: 1}, ['<li>server1</li>']);
|
||||||
const database1 = tree.addNewNode('database1', {_type: 'database'}, ['<li>database1</li>']);
|
const database1 = tree.addNewNode('database1', {_type: 'database'}, ['<li>database1</li>']);
|
||||||
tree.addChild(server1, database1);
|
tree.addChild(server1, database1);
|
||||||
@ -100,7 +107,7 @@ describe('#enableTriggers', () => {
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
expect(tree.selected()).toEqual(['<li>table1</li>']);
|
expect(tree.selected()).toEqual(['<li>table1</li>']);
|
||||||
done();
|
done();
|
||||||
}, 20);
|
}, 30);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('call backend with the correct parameters', (done) => {
|
it('call backend with the correct parameters', (done) => {
|
||||||
@ -171,6 +178,12 @@ describe('#disableTriggers', () => {
|
|||||||
alertify = jasmine.createSpyObj('alertify', ['success', 'error']);
|
alertify = jasmine.createSpyObj('alertify', ['success', 'error']);
|
||||||
generateUrlSpy = jasmine.createSpy('generateUrl');
|
generateUrlSpy = jasmine.createSpy('generateUrl');
|
||||||
generateUrlSpy.and.returnValue('/some/place');
|
generateUrlSpy.and.returnValue('/some/place');
|
||||||
|
spyOn(tree, 'unload').and.callFake(function() {
|
||||||
|
return new Promise((resolve)=>{
|
||||||
|
resolve('Success!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('no node is selected', () => {
|
describe('no node is selected', () => {
|
||||||
|
@ -1,363 +0,0 @@
|
|||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// pgAdmin 4 - PostgreSQL Tools
|
|
||||||
//
|
|
||||||
// Copyright (C) 2013 - 2021, The pgAdmin Development Team
|
|
||||||
// This software is released under the PostgreSQL Licence
|
|
||||||
//
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
import {
|
|
||||||
getTreeNodeHierarchyFromElement,
|
|
||||||
getTreeNodeHierarchyFromIdentifier,
|
|
||||||
} from '../../../pgadmin/static/js/tree/pgadmin_tree_node';
|
|
||||||
import {TreeNode} from '../../../pgadmin/static/js/tree/tree';
|
|
||||||
import {TreeFake} from './tree_fake';
|
|
||||||
|
|
||||||
const context = describe;
|
|
||||||
|
|
||||||
describe('tree#node#getTreeNodeHierarchy', () => {
|
|
||||||
let browser;
|
|
||||||
let newTree;
|
|
||||||
beforeEach(() => {
|
|
||||||
newTree = new TreeFake();
|
|
||||||
browser = {
|
|
||||||
Nodes: {
|
|
||||||
'special one': {hasId: true},
|
|
||||||
'child special': {hasId: true},
|
|
||||||
'other type': {hasId: true},
|
|
||||||
'table': {hasId: true},
|
|
||||||
'partition': {hasId: true},
|
|
||||||
'no id': {hasId: false},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
browser.treeMenu = newTree;
|
|
||||||
});
|
|
||||||
|
|
||||||
context('getTreeNodeHierarchy is called with aciTreeNode object', () => {
|
|
||||||
describe('When the current node is root element', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns a object with the element type passed data and priority == 0', () => {
|
|
||||||
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)([{id: 'root'}]);
|
|
||||||
expect(result).toEqual({
|
|
||||||
'special one': {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
'priority': 0,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the current node is not of a known type', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'do not exist',
|
|
||||||
}, []);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns a empty object', () => {
|
|
||||||
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)('root');
|
|
||||||
expect(result).toEqual({});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the current node type has no id', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'no id',
|
|
||||||
}, []);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns a empty object', () => {
|
|
||||||
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)('root');
|
|
||||||
expect(result).toEqual({});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the current node is at the second level', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
const root = newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
});
|
|
||||||
const firstChild = new TreeNode('first child', {
|
|
||||||
'some key': 'some other value',
|
|
||||||
'_type': 'child special',
|
|
||||||
}, ['root']);
|
|
||||||
newTree.addChild(root, firstChild);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns a empty object', () => {
|
|
||||||
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)([{id: 'first child'}]);
|
|
||||||
expect(result).toEqual({
|
|
||||||
'child special': {
|
|
||||||
'some key': 'some other value',
|
|
||||||
'_type': 'child special',
|
|
||||||
'priority': 0,
|
|
||||||
},
|
|
||||||
'special one': {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
'priority': -1,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
context('When tree as "special type"', () => {
|
|
||||||
context('When "special type" have "other type"', () => {
|
|
||||||
context('When "other type" have "special type"', () => {
|
|
||||||
describe('When retrieving lead node', () => {
|
|
||||||
it('does not override previous node type data', () => {
|
|
||||||
const rootNode = newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const level1 = new TreeNode('level 1', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'other type',
|
|
||||||
});
|
|
||||||
newTree.addChild(rootNode, level1);
|
|
||||||
|
|
||||||
newTree.addChild(level1, new TreeNode('level 2', {
|
|
||||||
'some key': 'expected value',
|
|
||||||
'_type': 'special one',
|
|
||||||
'some other key': 'some other value',
|
|
||||||
}));
|
|
||||||
|
|
||||||
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)([{id: 'level 2'}]);
|
|
||||||
expect(result).toEqual({
|
|
||||||
'special one': {
|
|
||||||
'some key': 'expected value',
|
|
||||||
'_type': 'special one',
|
|
||||||
'some other key': 'some other value',
|
|
||||||
'priority': 0,
|
|
||||||
},
|
|
||||||
'other type': {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'other type',
|
|
||||||
'priority': -1,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
context('When tree has table', () => {
|
|
||||||
context('when table has partition', () => {
|
|
||||||
it('returns table with partition parameters', () => {
|
|
||||||
const root = newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
}, []);
|
|
||||||
const level1 = new TreeNode('level 1', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'table',
|
|
||||||
});
|
|
||||||
newTree.addChild(root, level1);
|
|
||||||
newTree.addChild(level1, new TreeNode('level 2', {
|
|
||||||
'some key': 'expected value',
|
|
||||||
'_type': 'partition',
|
|
||||||
'some other key': 'some other value',
|
|
||||||
}));
|
|
||||||
|
|
||||||
const result = getTreeNodeHierarchyFromIdentifier.bind(browser)([{id:'level 2'}]);
|
|
||||||
expect(result).toEqual({
|
|
||||||
'special one': {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
'priority': -2,
|
|
||||||
},
|
|
||||||
'table': {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'table',
|
|
||||||
'priority': -1,
|
|
||||||
},
|
|
||||||
'partition': {
|
|
||||||
'some key': 'expected value',
|
|
||||||
'some other key': 'some other value',
|
|
||||||
'_type': 'partition',
|
|
||||||
'priority': 0,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
context('getTreeNodeHierarchy is called with TreeNode object', () => {
|
|
||||||
let treeNode;
|
|
||||||
describe('When the current node is root element', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
treeNode = newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
}, []);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns a object with the element type passed data and priority == 0', () => {
|
|
||||||
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
|
|
||||||
expect(result).toEqual({
|
|
||||||
'special one': {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
'priority': 0,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the current node is not of a known type', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
treeNode = newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'do not exist',
|
|
||||||
}, []);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns a empty object', () => {
|
|
||||||
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
|
|
||||||
expect(result).toEqual({});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the current node type has no id', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
treeNode = newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'no id',
|
|
||||||
}, []);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns a empty object', () => {
|
|
||||||
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
|
|
||||||
expect(result).toEqual({});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the current node is at the second level', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
const root = newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
}, []);
|
|
||||||
treeNode = new TreeNode('first child', {
|
|
||||||
'some key': 'some other value',
|
|
||||||
'_type': 'child special',
|
|
||||||
});
|
|
||||||
newTree.addChild(root, treeNode);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns a empty object', () => {
|
|
||||||
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
|
|
||||||
expect(result).toEqual({
|
|
||||||
'child special': {
|
|
||||||
'some key': 'some other value',
|
|
||||||
'_type': 'child special',
|
|
||||||
'priority': 0,
|
|
||||||
},
|
|
||||||
'special one': {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
'priority': -1,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
context('When tree as "special type"', () => {
|
|
||||||
context('When "special type" have "other type"', () => {
|
|
||||||
context('When "other type" have "special type"', () => {
|
|
||||||
describe('When retrieving lead node', () => {
|
|
||||||
it('does not override previous node type data', () => {
|
|
||||||
const root = newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
}, []);
|
|
||||||
const level1 = new TreeNode('level 1', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'other type',
|
|
||||||
});
|
|
||||||
newTree.addChild(root, level1);
|
|
||||||
treeNode = new TreeNode('level 2', {
|
|
||||||
'some key': 'expected value',
|
|
||||||
'_type': 'special one',
|
|
||||||
'some other key': 'some other value',
|
|
||||||
});
|
|
||||||
newTree.addChild(level1, treeNode);
|
|
||||||
|
|
||||||
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
|
|
||||||
expect(result).toEqual({
|
|
||||||
'special one': {
|
|
||||||
'some key': 'expected value',
|
|
||||||
'_type': 'special one',
|
|
||||||
'some other key': 'some other value',
|
|
||||||
'priority': 0,
|
|
||||||
},
|
|
||||||
'other type': {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'other type',
|
|
||||||
'priority': -1,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
context('When tree has table', () => {
|
|
||||||
context('when table has partition', () => {
|
|
||||||
it('returns table with partition parameters', () => {
|
|
||||||
const root = newTree.addNewNode('root', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
});
|
|
||||||
const level1 = newTree.addNewNode('level 1', {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'table',
|
|
||||||
});
|
|
||||||
newTree.addChild(root, level1);
|
|
||||||
treeNode = new TreeNode('level 2', {
|
|
||||||
'some key': 'expected value',
|
|
||||||
'_type': 'partition',
|
|
||||||
'some other key': 'some other value',
|
|
||||||
});
|
|
||||||
newTree.addChild(level1, treeNode);
|
|
||||||
|
|
||||||
const result = getTreeNodeHierarchyFromElement(browser, treeNode);
|
|
||||||
expect(result).toEqual({
|
|
||||||
'special one': {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'special one',
|
|
||||||
'priority': -2,
|
|
||||||
},
|
|
||||||
'table': {
|
|
||||||
'some key': 'some value',
|
|
||||||
'_type': 'table',
|
|
||||||
'priority': -1,
|
|
||||||
},
|
|
||||||
'partition': {
|
|
||||||
'some key': 'expected value',
|
|
||||||
'some other key': 'some other value',
|
|
||||||
'_type': 'partition',
|
|
||||||
'priority': 0,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@ -107,7 +107,10 @@ describe('#browserTreeState', () => {
|
|||||||
};},
|
};},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
pgBrowser.tree = jasmine.createSpyObj('tree', ['itemData', 'pathId', 'hasParent', 'isOpen', 'isClosed', 'selected']);
|
pgBrowser.tree = jasmine.createSpyObj('tree', ['itemData', 'pathId', 'hasParent', 'isOpen', 'isClosed', 'selected', 'parent']);
|
||||||
|
pgBrowser.tree.getTreeNodeHierarchy = function (item) {
|
||||||
|
return pgBrowser.Nodes[item._type].getTreeNodeHierarchy();
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('When node is opened tree state is getting updated', () => {
|
describe('When node is opened tree state is getting updated', () => {
|
||||||
|
@ -8,10 +8,11 @@
|
|||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import {Tree} from '../../../pgadmin/static/js/tree/tree';
|
import {Tree} from '../../../pgadmin/static/js/tree/tree';
|
||||||
|
import {ManageTreeNodes, TreeNode} from '../../../pgadmin/static/js/tree/tree_nodes';
|
||||||
|
|
||||||
export class TreeFake extends Tree {
|
export class TreeFake extends Tree {
|
||||||
static build(structure) {
|
static build(structure, pgBrowser) {
|
||||||
let tree = new TreeFake();
|
let tree = new TreeFake(pgBrowser);
|
||||||
let rootNode = tree.rootNode;
|
let rootNode = tree.rootNode;
|
||||||
|
|
||||||
if (structure.children !== undefined) {
|
if (structure.children !== undefined) {
|
||||||
@ -27,7 +28,10 @@ export class TreeFake extends Tree {
|
|||||||
let id = newNode.id;
|
let id = newNode.id;
|
||||||
let data = newNode.data ? newNode.data : {};
|
let data = newNode.data ? newNode.data : {};
|
||||||
let domNode = newNode.domNode ? newNode.domNode : [{id: id}];
|
let domNode = newNode.domNode ? newNode.domNode : [{id: id}];
|
||||||
tree.addNewNode(id, data, domNode, tree.translateTreeNodeIdFromACITree([parent]));
|
|
||||||
|
let parentPath = tree.translateTreeNodeIdFromReactTree([parent]);
|
||||||
|
|
||||||
|
tree.addNewNode(id, data, domNode, parentPath);
|
||||||
|
|
||||||
if (newNode.children !== undefined) {
|
if (newNode.children !== undefined) {
|
||||||
newNode.children.forEach((child) => {
|
newNode.children.forEach((child) => {
|
||||||
@ -36,50 +40,96 @@ export class TreeFake extends Tree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor(pgBrowser) {
|
||||||
super();
|
let manageTree = new ManageTreeNodes();
|
||||||
this.aciTreeToOurTreeTranslator = {};
|
let tree = jasmine.createSpyObj(
|
||||||
this.aciTreeApi = jasmine.createSpyObj(
|
'tree', ['unload', 'onTreeEvents',
|
||||||
'ACITreeApi', ['setInode', 'unload', 'deselect', 'select']);
|
'getActiveFile', 'setActiveFile',
|
||||||
this.aciTreeApi.unload.and.callFake(function(domNode, config) {
|
'deSelectActiveFile', 'closeDirectory']);
|
||||||
|
tree.unload.and.callFake(function(domNode, config) {
|
||||||
config.success();
|
config.success();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
super(tree, manageTree, pgBrowser);
|
||||||
|
this.aciTreeToOurTreeTranslator = {};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
addNewNode(id, data, domNode, path) {
|
addNewNode(id, data, domNode, path) {
|
||||||
this.aciTreeToOurTreeTranslator[id] = [id];
|
this.aciTreeToOurTreeTranslator[id] = id;
|
||||||
if (path !== null && path !== undefined) {
|
if (path !== null && path !== undefined) {
|
||||||
this.aciTreeToOurTreeTranslator[id] = path.concat(id);
|
if (typeof(path) === 'object') path = path.join('/');
|
||||||
|
this.aciTreeToOurTreeTranslator[id] = path != '' ? path + '/' + id : id;
|
||||||
|
if (path.indexOf('/browser/') != 0) path = path != '' ? '/browser/' + path : undefined;
|
||||||
}
|
}
|
||||||
return super.addNewNode(id, data, domNode, path);
|
return super.addNewNode(id, data, domNode, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
addChild(parent, child) {
|
addChild(parent, child) {
|
||||||
child.setParent(parent);
|
child.setParent(parent);
|
||||||
this.aciTreeToOurTreeTranslator[child.id] = this.aciTreeToOurTreeTranslator[parent.id].concat(child.id);
|
this.aciTreeToOurTreeTranslator[child.id] = this.aciTreeToOurTreeTranslator[parent.id] + '/' + child.id;
|
||||||
parent.children.push(child);
|
parent.children.push(child);
|
||||||
}
|
}
|
||||||
|
|
||||||
hasParent(aciTreeNode) {
|
hasParent(aciTreeNode) {
|
||||||
return this.translateTreeNodeIdFromACITree(aciTreeNode).length > 1;
|
let parents = this.translateTreeNodeIdFromReactTree(aciTreeNode).split('/');
|
||||||
|
return parents.length > 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
parent(aciTreeNode) {
|
parent(aciTreeNode) {
|
||||||
if (this.hasParent(aciTreeNode)) {
|
if (this.hasParent(aciTreeNode)) {
|
||||||
let path = this.translateTreeNodeIdFromACITree(aciTreeNode);
|
let path = this.translateTreeNodeIdFromReactTree(aciTreeNode);
|
||||||
return [{id: this.findNode(path).parent().id}];
|
return [{id: this.findNode('/browser/' + path).parent().id}];
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
translateTreeNodeIdFromACITree(aciTreeNode) {
|
translateTreeNodeIdFromReactTree(aciTreeNode) {
|
||||||
if (aciTreeNode === undefined || aciTreeNode[0] === undefined) {
|
if (aciTreeNode === undefined || aciTreeNode[0] === undefined) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return this.aciTreeToOurTreeTranslator[aciTreeNode[0].id];
|
return this.aciTreeToOurTreeTranslator[aciTreeNode[0].id];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
findNodeByDomElement(domElement) {
|
||||||
|
const path = this.translateTreeNodeIdFromReactTree(domElement);
|
||||||
|
|
||||||
|
if(!path || !path[0]) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.findNode('/browser/' + path);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
getTreeNodeHierarchy(identifier) {
|
||||||
|
let idx = 0;
|
||||||
|
let node_cnt = 0;
|
||||||
|
let result = {};
|
||||||
|
let item = TreeNode.prototype.isPrototypeOf(identifier) ? identifier :
|
||||||
|
(identifier.path ? this.findNode(identifier.path) : this.findNodeByDomElement(identifier));
|
||||||
|
|
||||||
|
if (item == undefined || item == null) return null;
|
||||||
|
|
||||||
|
do {
|
||||||
|
const currentNodeData = item.getData();
|
||||||
|
if (currentNodeData._type in this.Nodes && this.Nodes[currentNodeData._type].hasId) {
|
||||||
|
const nodeType = mapType(currentNodeData._type, node_cnt);
|
||||||
|
if (result[nodeType] === undefined) {
|
||||||
|
result[nodeType] = _.extend({}, currentNodeData, {
|
||||||
|
'priority': idx,
|
||||||
|
});
|
||||||
|
idx -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
node_cnt += 1;
|
||||||
|
item = item.hasParent() ? item.parent() : null;
|
||||||
|
} while (item);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
itemData(aciTreeNode) {
|
itemData(aciTreeNode) {
|
||||||
let node = this.findNodeByDomElement(aciTreeNode);
|
let node = this.findNodeByDomElement(aciTreeNode);
|
||||||
if (node === undefined || node === null) {
|
if (node === undefined || node === null) {
|
||||||
@ -96,3 +146,7 @@ export class TreeFake extends Tree {
|
|||||||
this.selectedNode = selectedNode;
|
this.selectedNode = selectedNode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function mapType(type, idx) {
|
||||||
|
return (type === 'partition' && idx > 0) ? 'table' : type;
|
||||||
|
}
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// pgAdmin 4 - PostgreSQL Tools
|
// pgAdmin 4 PostgreSQL Tools
|
||||||
//
|
//
|
||||||
// Copyright (C) 2013 - 2021, The pgAdmin Development Team
|
// Copyright (C) 2013 2021, The pgAdmin Development Team
|
||||||
// This software is released under the PostgreSQL Licence
|
// This software is released under the PostgreSQL Licence
|
||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
import {Tree, TreeNode} from '../../../pgadmin/static/js/tree/tree';
|
import {Tree} from '../../../pgadmin/static/js/tree/tree';
|
||||||
|
import {TreeNode, ManageTreeNodes} from '../../../pgadmin/static/js/tree/tree_nodes';
|
||||||
import {TreeFake} from './tree_fake';
|
import {TreeFake} from './tree_fake';
|
||||||
|
|
||||||
const context = describe;
|
const context = describe;
|
||||||
@ -15,28 +16,34 @@ const context = describe;
|
|||||||
const treeTests = (treeClass, setDefaultCallBack) => {
|
const treeTests = (treeClass, setDefaultCallBack) => {
|
||||||
let tree;
|
let tree;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
tree = new treeClass();
|
let manageTree = new ManageTreeNodes();
|
||||||
|
let reactTree = jasmine.createSpyObj(
|
||||||
|
'tree', ['onTreeEvents', 'getActiveFile']);
|
||||||
|
tree = new treeClass(reactTree, manageTree);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#addNewNode', () => {
|
describe('#addNewNode', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
tree.rootNode = new TreeNode(undefined, {});
|
||||||
|
});
|
||||||
describe('when add a new root element', () => {
|
describe('when add a new root element', () => {
|
||||||
context('using [] as the parent', () => {
|
context('using undefined as the parent', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
tree.addNewNode('some new node', {data: 'interesting'}, undefined, []);
|
tree.addNewNode('some new node', {data: 'interesting'}, undefined, undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('can be retrieved', () => {
|
it('can be retrieved', () => {
|
||||||
const node = tree.findNode(['some new node']);
|
const node = tree.findNode('/browser/some new node');
|
||||||
expect(node.data).toEqual({data: 'interesting'});
|
expect(node.data).toEqual({data: 'interesting'});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('return false for #hasParent()', () => {
|
it('return false for #hasParent()', () => {
|
||||||
const node = tree.findNode(['some new node']);
|
const node = tree.findNode('/browser/some new node');
|
||||||
expect(node.hasParent()).toEqual(false);
|
expect(node.hasParent()).toEqual(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('return null for #parent()', () => {
|
it('return null for #parent()', () => {
|
||||||
const node = tree.findNode(['some new node']);
|
const node = tree.findNode('/browser/some new node');
|
||||||
expect(node.parent()).toBeNull();
|
expect(node.parent()).toBeNull();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -47,38 +54,17 @@ const treeTests = (treeClass, setDefaultCallBack) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('can be retrieved', () => {
|
it('can be retrieved', () => {
|
||||||
const node = tree.findNode(['some new node']);
|
const node = tree.findNode('/browser/some new node');
|
||||||
expect(node.data).toEqual({data: 'interesting'});
|
expect(node.data).toEqual({data: 'interesting'});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('return false for #hasParent()', () => {
|
it('return false for #hasParent()', () => {
|
||||||
const node = tree.findNode(['some new node']);
|
const node = tree.findNode('/browser/some new node');
|
||||||
expect(node.hasParent()).toEqual(false);
|
expect(node.hasParent()).toEqual(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('return null for #parent()', () => {
|
it('return null for #parent()', () => {
|
||||||
const node = tree.findNode(['some new node']);
|
const node = tree.findNode('/browser/some new node');
|
||||||
expect(node.parent()).toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
context('using undefined as the parent', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
tree.addNewNode('some new node', {data: 'interesting'});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can be retrieved', () => {
|
|
||||||
const node = tree.findNode(['some new node']);
|
|
||||||
expect(node.data).toEqual({data: 'interesting'});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('return false for #hasParent()', () => {
|
|
||||||
const node = tree.findNode(['some new node']);
|
|
||||||
expect(node.hasParent()).toEqual(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('return null for #parent()', () => {
|
|
||||||
const node = tree.findNode(['some new node']);
|
|
||||||
expect(node.parent()).toBeNull();
|
expect(node.parent()).toBeNull();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -87,101 +73,46 @@ const treeTests = (treeClass, setDefaultCallBack) => {
|
|||||||
describe('when add a new element as a child', () => {
|
describe('when add a new element as a child', () => {
|
||||||
let parentNode;
|
let parentNode;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
parentNode = tree.addNewNode('parent node', {data: 'parent data'}, undefined, []);
|
parentNode = tree.addNewNode('parent node', {data: 'parent data'}, undefined, undefined);
|
||||||
tree.addNewNode('some new node', {data: 'interesting'}, undefined, ['parent' +
|
tree.addNewNode('some new node', {data: 'interesting'}, undefined, '/browser/parent node');
|
||||||
' node']);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('can be retrieved', () => {
|
it('can be retrieved', () => {
|
||||||
const node = tree.findNode(['parent node', 'some new node']);
|
const node = tree.findNode('/browser/parent node/some new node');
|
||||||
expect(node.data).toEqual({data: 'interesting'});
|
expect(node.data).toEqual({data: 'interesting'});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('return true for #hasParent()', () => {
|
it('return true for #hasParent()', () => {
|
||||||
const node = tree.findNode(['parent node', 'some new node']);
|
const node = tree.findNode('/browser/parent node/some new node');
|
||||||
expect(node.hasParent()).toEqual(true);
|
expect(node.hasParent()).toEqual(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('return "parent node" object for #parent()', () => {
|
it('return "parent node" object for #parent()', () => {
|
||||||
const node = tree.findNode(['parent node', 'some new node']);
|
const node = tree.findNode('/browser/parent node/some new node');
|
||||||
expect(node.parent()).toEqual(parentNode);
|
expect(node.parent()).toEqual(parentNode);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('when add an element that already exists under a parent', () => {
|
describe('when add an element that already exists under a parent', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
tree.addNewNode('parent node', {data: 'parent data'}, undefined, []);
|
tree.addNewNode('parent node', {data: 'parent data'}, undefined, undefined);
|
||||||
tree.addNewNode('some new node', {data: 'interesting'}, undefined, ['parent' +
|
tree.addNewNode('some new node', {data: 'interesting'}, undefined, '/browser/parent node');
|
||||||
' node']);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not add a new child', () => {
|
it('does not add a new child', () => {
|
||||||
tree.addNewNode('some new node', {data: 'interesting 1'}, undefined, ['parent' +
|
tree.addNewNode('some new node', {data: 'interesting 1'}, undefined, '/browser/parent node');
|
||||||
' node']);
|
const parentNode = tree.findNode('/browser/parent node');
|
||||||
const parentNode = tree.findNode(['parent node']);
|
|
||||||
expect(parentNode.children.length).toEqual(1);
|
expect(parentNode.children.length).toEqual(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('updates the existing node data', () => {
|
it('updates the existing node data', () => {
|
||||||
tree.addNewNode('some new node', {data: 'interesting 1'}, undefined, ['parent' +
|
tree.addNewNode('some new node', {data: 'interesting 1'}, undefined, '/browser/parent node');
|
||||||
' node']);
|
const node = tree.findNode('/browser/parent node/some new node');
|
||||||
const node = tree.findNode(['parent node', 'some new node']);
|
|
||||||
expect(node.data).toEqual({data: 'interesting 1'});
|
expect(node.data).toEqual({data: 'interesting 1'});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#translateTreeNodeIdFromACITree', () => {
|
|
||||||
let aciTreeApi;
|
|
||||||
beforeEach(() => {
|
|
||||||
aciTreeApi = jasmine.createSpyObj('ACITreeApi', [
|
|
||||||
'hasParent',
|
|
||||||
'parent',
|
|
||||||
'getId',
|
|
||||||
]);
|
|
||||||
|
|
||||||
aciTreeApi.getId.and.callFake((node) => {
|
|
||||||
return node[0].id;
|
|
||||||
});
|
|
||||||
tree.aciTreeApi = aciTreeApi;
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When tree as a single level', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
aciTreeApi.hasParent.and.returnValue(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns an array with the ID of the first level', () => {
|
|
||||||
let node = [{
|
|
||||||
id: 'some id',
|
|
||||||
}];
|
|
||||||
tree.addNewNode('some id', {}, undefined, []);
|
|
||||||
|
|
||||||
expect(tree.translateTreeNodeIdFromACITree(node)).toEqual(['some id']);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When tree as a 2 levels', () => {
|
|
||||||
describe('When we try to retrieve the node in the second level', () => {
|
|
||||||
it('returns an array with the ID of the first level and second level', () => {
|
|
||||||
aciTreeApi.hasParent.and.returnValues(true, false);
|
|
||||||
aciTreeApi.parent.and.returnValue([{
|
|
||||||
id: 'parent id',
|
|
||||||
}]);
|
|
||||||
let node = [{
|
|
||||||
id: 'some id',
|
|
||||||
}];
|
|
||||||
|
|
||||||
tree.addNewNode('parent id', {}, undefined, []);
|
|
||||||
tree.addNewNode('some id', {}, undefined, ['parent id']);
|
|
||||||
|
|
||||||
expect(tree.translateTreeNodeIdFromACITree(node))
|
|
||||||
.toEqual(['parent id', 'some id']);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('#selected', () => {
|
describe('#selected', () => {
|
||||||
context('a node in the tree is selected', () => {
|
context('a node in the tree is selected', () => {
|
||||||
it('returns that node object', () => {
|
it('returns that node object', () => {
|
||||||
@ -195,16 +126,17 @@ const treeTests = (treeClass, setDefaultCallBack) => {
|
|||||||
describe('#findNodeByTreeElement', () => {
|
describe('#findNodeByTreeElement', () => {
|
||||||
context('retrieve data from node not found', () => {
|
context('retrieve data from node not found', () => {
|
||||||
it('return undefined', () => {
|
it('return undefined', () => {
|
||||||
let aciTreeApi = jasmine.createSpyObj('ACITreeApi', [
|
let reactTree = jasmine.createSpyObj('tree', [
|
||||||
'hasParent',
|
'hasParent',
|
||||||
'parent',
|
'parent',
|
||||||
'getId',
|
'getId',
|
||||||
|
'onTreeEvents',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
aciTreeApi.getId.and.callFake((node) => {
|
reactTree.getId.and.callFake((node) => {
|
||||||
return node[0].id;
|
return node[0].id;
|
||||||
});
|
});
|
||||||
tree.aciTreeApi = aciTreeApi;
|
tree.tree = reactTree;
|
||||||
expect(tree.findNodeByDomElement(['<li>something</li>'])).toBeUndefined();
|
expect(tree.findNodeByDomElement(['<li>something</li>'])).toBeUndefined();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -240,14 +172,18 @@ describe('tree tests', () => {
|
|||||||
let level2;
|
let level2;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
tree = new TreeFake();
|
tree = new TreeFake();
|
||||||
tree.addNewNode('level1', {data: 'interesting'}, [{id: 'level1'}], []);
|
tree.addNewNode('level1', {data: 'interesting'}, [{id: 'level1'}], undefined);
|
||||||
level2 = tree.addNewNode('level2', {data: 'data'}, [{id: 'level2'}], ['level1']);
|
level2 = tree.addNewNode('level2', {data: 'data'}, [{id: 'level2'}], ['level1']);
|
||||||
tree.addNewNode('level3', {data: 'more data'}, [{id: 'level3'}], ['level1', 'level2']);
|
tree.addNewNode('level3', {data: 'more data'}, [{id: 'level3'}], ['level1', 'level2']);
|
||||||
|
|
||||||
tree.aciTreeApi = jasmine.createSpyObj(
|
tree.tree = jasmine.createSpyObj(
|
||||||
'ACITreeApi', ['setInode', 'unload', 'deselect', 'select']);
|
'tree', ['unload', 'onTreeEvents',
|
||||||
tree.aciTreeApi.unload.and.callFake((domNode, config) => {
|
'setActiveFile', 'closeDirectory', 'getActiveFile',
|
||||||
config.success();
|
'deSelectActiveFile']);
|
||||||
|
tree.tree.unload.and.callFake(function() {
|
||||||
|
return new Promise((resolve)=>{
|
||||||
|
resolve('Success!');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -286,11 +222,11 @@ describe('tree tests', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('ACITree specific', () => {
|
describe('ReactTree specific', () => {
|
||||||
it('sets the current node as a Inode, changing the Icon back to +', (done) => {
|
it('sets the current node as a Inode, changing the Icon back to +', (done) => {
|
||||||
level2.reload(tree)
|
level2.reload(tree)
|
||||||
.then(()=>{
|
.then(()=>{
|
||||||
expect(tree.aciTreeApi.setInode).toHaveBeenCalledWith([{id: 'level2'}]);
|
expect(tree.tree.closeDirectory).toHaveBeenCalledWith([{id: 'level2'}]);
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch((error)=>{
|
.catch((error)=>{
|
||||||
@ -298,12 +234,12 @@ describe('tree tests', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('deselect the node and selects it again to trigger ACI tree' +
|
it('deselect the node and selects it again to trigger React tree' +
|
||||||
' events', (done) => {
|
' events', (done) => {
|
||||||
level2.reload(tree)
|
level2.reload(tree)
|
||||||
.then(()=>{
|
.then(()=>{
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
expect(tree.aciTreeApi.deselect).toHaveBeenCalledWith([{id: 'level2'}]);
|
expect(tree.tree.deSelectActiveFile).toHaveBeenCalledWith([{id: 'level2'}]);
|
||||||
done();
|
done();
|
||||||
}, 20);
|
}, 20);
|
||||||
})
|
})
|
||||||
@ -319,12 +255,14 @@ describe('tree tests', () => {
|
|||||||
let level2;
|
let level2;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
tree = new TreeFake();
|
tree = new TreeFake();
|
||||||
tree.addNewNode('level1', {data: 'interesting'}, ['<li>level1</li>'], []);
|
tree.addNewNode('level1', {data: 'interesting'}, ['<li>level1</li>'], undefined);
|
||||||
level2 = tree.addNewNode('level2', {data: 'data'}, ['<li>level2</li>'], ['level1']);
|
level2 = tree.addNewNode('level2', {data: 'data'}, ['<li>level2</li>'], ['level1']);
|
||||||
tree.addNewNode('level3', {data: 'more data'}, ['<li>level3</li>'], ['level1', 'level2']);
|
tree.addNewNode('level3', {data: 'more data'}, ['<li>level3</li>'], ['level1','level2']);
|
||||||
tree.aciTreeApi = jasmine.createSpyObj('ACITreeApi', ['unload']);
|
tree.tree = jasmine.createSpyObj('tree', ['unload']);
|
||||||
tree.aciTreeApi.unload.and.callFake((domNode, config) => {
|
tree.tree.unload.and.callFake(() => {
|
||||||
config.success();
|
return new Promise((resolve)=>{
|
||||||
|
resolve('Success!');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -340,10 +278,10 @@ describe('tree tests', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('calls unload on the ACI Tree', (done) => {
|
it('calls unload on the React Tree', (done) => {
|
||||||
level2.unload(tree)
|
level2.unload(tree)
|
||||||
.then(()=>{
|
.then(()=>{
|
||||||
expect(tree.aciTreeApi.unload).toHaveBeenCalledWith(['<li>level2</li>'], jasmine.any(Object));
|
expect(tree.tree.unload).toHaveBeenCalledWith(['<li>level2</li>']);
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch((error)=>{
|
.catch((error)=>{
|
||||||
@ -355,11 +293,11 @@ describe('tree tests', () => {
|
|||||||
|
|
||||||
describe('Tree', () => {
|
describe('Tree', () => {
|
||||||
function realTreeSelectNode(tree, selectedNode) {
|
function realTreeSelectNode(tree, selectedNode) {
|
||||||
let aciTreeApi = jasmine.createSpyObj('ACITreeApi', [
|
let reactTree = jasmine.createSpyObj('tree', [
|
||||||
'selected',
|
'getActiveFile',
|
||||||
]);
|
]);
|
||||||
tree.aciTreeApi = aciTreeApi;
|
tree.tree = reactTree;
|
||||||
aciTreeApi.selected.and.returnValue(selectedNode);
|
reactTree.getActiveFile.and.returnValue(selectedNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
treeTests(Tree, realTreeSelectNode);
|
treeTests(Tree, realTreeSelectNode);
|
||||||
@ -377,8 +315,8 @@ describe('tree tests', () => {
|
|||||||
let tree;
|
let tree;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
tree = new TreeFake();
|
tree = new TreeFake();
|
||||||
tree.addNewNode('level1', {data: 'interesting'}, undefined, []);
|
tree.addNewNode('level1', {data: 'interesting'}, undefined, undefined);
|
||||||
tree.addNewNode('level2', {data: 'interesting'}, undefined, ['level1']);
|
tree.addNewNode('level2', {data: 'interesting'}, undefined, '/browser/level1');
|
||||||
});
|
});
|
||||||
|
|
||||||
context('node is at the first level', () => {
|
context('node is at the first level', () => {
|
||||||
@ -399,7 +337,7 @@ describe('tree tests', () => {
|
|||||||
let tree;
|
let tree;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
tree = new TreeFake();
|
tree = new TreeFake();
|
||||||
tree.addNewNode('level1', {data: 'interesting'}, undefined, []);
|
tree.addNewNode('level1', {data: 'interesting'}, undefined, undefined);
|
||||||
tree.addNewNode('level2', {data: 'interesting'}, undefined, ['level1']);
|
tree.addNewNode('level2', {data: 'interesting'}, undefined, ['level1']);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -416,30 +354,6 @@ describe('tree tests', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#itemData', () => {
|
|
||||||
let tree;
|
|
||||||
beforeEach(() => {
|
|
||||||
tree = new TreeFake();
|
|
||||||
tree.addNewNode('level1', {data: 'interesting'}, undefined, []);
|
|
||||||
tree.addNewNode('level2', {data: 'expected data'}, undefined, ['level1']);
|
|
||||||
});
|
|
||||||
|
|
||||||
context('retrieve data from the node', () => {
|
|
||||||
it('return the node data', () => {
|
|
||||||
expect(tree.itemData([{id: 'level2'}])).toEqual({
|
|
||||||
data: 'expected' +
|
|
||||||
' data',
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
context('retrieve data from node not found', () => {
|
|
||||||
it('return undefined', () => {
|
|
||||||
expect(tree.itemData([{id: 'bamm'}])).toBeUndefined();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('#addChild', () => {
|
describe('#addChild', () => {
|
||||||
let root, child;
|
let root, child;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@ -459,7 +373,7 @@ describe('tree tests', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('changes the path of the child', () => {
|
it('changes the path of the child', () => {
|
||||||
expect(child.path).toEqual('root.node.1');
|
expect(child.path).toEqual('/browser/root/node.1');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -190,7 +190,7 @@ var themeCssRules = function(theme_name) {
|
|||||||
filename: 'img/[name].[ext]',
|
filename: 'img/[name].[ext]',
|
||||||
},
|
},
|
||||||
exclude: /vendor/,
|
exclude: /vendor/,
|
||||||
}, {
|
},{
|
||||||
test: /\.(eot|svg|ttf|woff|woff2)$/,
|
test: /\.(eot|svg|ttf|woff|woff2)$/,
|
||||||
type: 'asset/resource',
|
type: 'asset/resource',
|
||||||
generator: {
|
generator: {
|
||||||
@ -203,7 +203,7 @@ var themeCssRules = function(theme_name) {
|
|||||||
path.join(sourceDir, '/fonts/'),
|
path.join(sourceDir, '/fonts/'),
|
||||||
],
|
],
|
||||||
exclude: /vendor/,
|
exclude: /vendor/,
|
||||||
}, {
|
},{
|
||||||
test: /\.scss$/,
|
test: /\.scss$/,
|
||||||
use: [
|
use: [
|
||||||
{
|
{
|
||||||
@ -212,7 +212,13 @@ var themeCssRules = function(theme_name) {
|
|||||||
publicPath: '',
|
publicPath: '',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{loader: 'css-loader'},
|
{
|
||||||
|
loader: 'css-loader',
|
||||||
|
options: {
|
||||||
|
url: false,
|
||||||
|
sourceMap: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
loader: 'postcss-loader',
|
loader: 'postcss-loader',
|
||||||
options: {
|
options: {
|
||||||
@ -403,8 +409,17 @@ module.exports = [{
|
|||||||
use: {
|
use: {
|
||||||
loader: 'babel-loader',
|
loader: 'babel-loader',
|
||||||
options: {
|
options: {
|
||||||
presets: [['@babel/preset-env', {'modules': 'commonjs', 'useBuiltIns': 'usage', 'corejs': 3}], '@babel/preset-react'],
|
presets: [['@babel/preset-env', {'modules': 'commonjs', 'useBuiltIns': 'usage', 'corejs': 3}], '@babel/preset-react', '@babel/preset-typescript'],
|
||||||
plugins: ['@babel/plugin-proposal-class-properties'],
|
plugins: ['@babel/plugin-proposal-class-properties', '@babel/proposal-object-rest-spread'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
test: /\.tsx?$|\.ts?$/,
|
||||||
|
use: {
|
||||||
|
loader: 'babel-loader',
|
||||||
|
options: {
|
||||||
|
presets: [['@babel/preset-env', {'modules': 'commonjs', 'useBuiltIns': 'usage', 'corejs': 3}], '@babel/preset-react', '@babel/preset-typescript'],
|
||||||
|
plugins: ['@babel/plugin-proposal-class-properties', '@babel/proposal-object-rest-spread'],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
@ -544,7 +559,7 @@ module.exports = [{
|
|||||||
resolve: {
|
resolve: {
|
||||||
alias: webpackShimConfig.resolveAlias,
|
alias: webpackShimConfig.resolveAlias,
|
||||||
modules: ['node_modules', '.'],
|
modules: ['node_modules', '.'],
|
||||||
extensions: ['.js', '.jsx'],
|
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
||||||
unsafeCache: true,
|
unsafeCache: true,
|
||||||
},
|
},
|
||||||
// Watch mode Configuration: After initial build, webpack will watch for
|
// Watch mode Configuration: After initial build, webpack will watch for
|
||||||
|
@ -155,6 +155,7 @@ var webpackShimConfig = {
|
|||||||
'react-dom': path.join(__dirname, 'node_modules/react-dom'),
|
'react-dom': path.join(__dirname, 'node_modules/react-dom'),
|
||||||
'stylis': path.join(__dirname, 'node_modules/stylis'),
|
'stylis': path.join(__dirname, 'node_modules/stylis'),
|
||||||
'popper.js': path.join(__dirname, 'node_modules/popper.js'),
|
'popper.js': path.join(__dirname, 'node_modules/popper.js'),
|
||||||
|
'pgadmin4-tree': path.join(__dirname, 'node_modules/pgadmin4-tree'),
|
||||||
|
|
||||||
// AciTree
|
// AciTree
|
||||||
'jquery.acitree': path.join(__dirname, './node_modules/acitree/js/jquery.aciTree.min'),
|
'jquery.acitree': path.join(__dirname, './node_modules/acitree/js/jquery.aciTree.min'),
|
||||||
|
@ -44,105 +44,115 @@ module.exports = {
|
|||||||
],
|
],
|
||||||
|
|
||||||
module: {
|
module: {
|
||||||
rules: [
|
rules: [{
|
||||||
{
|
test: /\.jsx?$/,
|
||||||
test: /\.jsx?$/,
|
exclude: [/node_modules/, /vendor/],
|
||||||
exclude: [/node_modules/, /vendor/],
|
use: {
|
||||||
use: {
|
loader: 'babel-loader',
|
||||||
loader: 'babel-loader',
|
options: {
|
||||||
|
presets: [['@babel/preset-env', {'modules': 'commonjs', 'useBuiltIns': 'usage', 'corejs': 3}], '@babel/preset-react'],
|
||||||
|
plugins: ['@babel/plugin-proposal-class-properties'],
|
||||||
|
sourceMap: 'inline',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
test: /\.tsx?$|\.ts?$/,
|
||||||
|
exclude: [/node_modules/, /vendor/],
|
||||||
|
use: {
|
||||||
|
loader: 'babel-loader',
|
||||||
|
options: {
|
||||||
|
presets: [['@babel/preset-env', {'modules': 'commonjs', 'useBuiltIns': 'usage', 'corejs': 3}], '@babel/preset-react', '@babel/preset-typescript'],
|
||||||
|
plugins: ['@babel/plugin-proposal-class-properties', '@babel/proposal-object-rest-spread'],
|
||||||
|
sourceMap: 'inline',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
test: /\.css$/,
|
||||||
|
type: 'asset/source',
|
||||||
|
use: ['style-loader'],
|
||||||
|
}, {
|
||||||
|
test: /\.(jpe?g|png|gif|svg)$/i,
|
||||||
|
type: 'asset',
|
||||||
|
parser: {
|
||||||
|
dataUrlCondition: {
|
||||||
|
maxSize: 4 * 1024, // 4kb
|
||||||
|
},
|
||||||
|
},
|
||||||
|
generator: {
|
||||||
|
filename: 'img/[name].[ext]',
|
||||||
|
},
|
||||||
|
exclude: /vendor/,
|
||||||
|
}, {
|
||||||
|
test: /.*slickgrid[\\\/]+slick\.(?!core)*/,
|
||||||
|
use:[
|
||||||
|
{
|
||||||
|
loader: 'imports-loader',
|
||||||
options: {
|
options: {
|
||||||
presets: [['@babel/preset-env', {'modules': 'commonjs', 'useBuiltIns': 'usage', 'corejs': 3}], '@babel/preset-react'],
|
type: 'commonjs',
|
||||||
plugins: ['@babel/plugin-proposal-class-properties'],
|
imports: [
|
||||||
sourceMap: 'inline',
|
'pure|jquery.ui',
|
||||||
|
'pure|jquery.event.drag',
|
||||||
|
'pure|slickgrid',
|
||||||
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, {
|
],
|
||||||
test: /\.css$/,
|
}, {
|
||||||
type: 'asset/source',
|
test: /.*slickgrid\.plugins[\\\/]+slick\.cellrangeselector/,
|
||||||
use: ['style-loader'],
|
use:[
|
||||||
}, {
|
{
|
||||||
test: /\.(jpe?g|png|gif|svg)$/i,
|
loader: 'imports-loader',
|
||||||
type: 'asset',
|
options: {
|
||||||
parser: {
|
type: 'commonjs',
|
||||||
dataUrlCondition: {
|
imports: [
|
||||||
maxSize: 4 * 1024, // 4kb
|
'pure|jquery.ui',
|
||||||
|
'pure|jquery.event.drag',
|
||||||
|
'pure|slickgrid',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
loader: 'exports-loader',
|
||||||
|
options: {
|
||||||
|
type: 'commonjs',
|
||||||
|
exports: 'single|Slick.CellRangeSelector',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
generator: {
|
],
|
||||||
filename: 'img/[name].[ext]',
|
}, {
|
||||||
|
test: /.*slickgrid[\\\/]+slick\.core.*/,
|
||||||
|
use:[
|
||||||
|
{
|
||||||
|
loader: 'imports-loader',
|
||||||
|
options: {
|
||||||
|
type: 'commonjs',
|
||||||
|
imports: [
|
||||||
|
'pure|jquery.ui',
|
||||||
|
'pure|jquery.event.drag',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
loader: 'exports-loader',
|
||||||
|
options: {
|
||||||
|
type: 'commonjs',
|
||||||
|
exports: 'single|Slick',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
exclude: /vendor/,
|
],
|
||||||
}, {
|
},
|
||||||
test: /.*slickgrid[\\\/]+slick\.(?!core)*/,
|
{
|
||||||
use:[
|
test: /\.js$|\.jsx$/,
|
||||||
{
|
use: {
|
||||||
loader: 'imports-loader',
|
loader: 'istanbul-instrumenter-loader',
|
||||||
options: {
|
options: { esModules: true },
|
||||||
type: 'commonjs',
|
|
||||||
imports: [
|
|
||||||
'pure|jquery.ui',
|
|
||||||
'pure|jquery.event.drag',
|
|
||||||
'pure|slickgrid',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}, {
|
|
||||||
test: /.*slickgrid\.plugins[\\\/]+slick\.cellrangeselector/,
|
|
||||||
use:[
|
|
||||||
{
|
|
||||||
loader: 'imports-loader',
|
|
||||||
options: {
|
|
||||||
type: 'commonjs',
|
|
||||||
imports: [
|
|
||||||
'pure|jquery.ui',
|
|
||||||
'pure|jquery.event.drag',
|
|
||||||
'pure|slickgrid',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
loader: 'exports-loader',
|
|
||||||
options: {
|
|
||||||
type: 'commonjs',
|
|
||||||
exports: 'single|Slick.CellRangeSelector',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}, {
|
|
||||||
test: /.*slickgrid[\\\/]+slick\.core.*/,
|
|
||||||
use:[
|
|
||||||
{
|
|
||||||
loader: 'imports-loader',
|
|
||||||
options: {
|
|
||||||
type: 'commonjs',
|
|
||||||
imports: [
|
|
||||||
'pure|jquery.ui',
|
|
||||||
'pure|jquery.event.drag',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
loader: 'exports-loader',
|
|
||||||
options: {
|
|
||||||
type: 'commonjs',
|
|
||||||
exports: 'single|Slick',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.js$|\.jsx$/,
|
|
||||||
use: {
|
|
||||||
loader: 'istanbul-instrumenter-loader',
|
|
||||||
options: { esModules: true },
|
|
||||||
},
|
|
||||||
enforce: 'post',
|
|
||||||
exclude: /node_modules|slickgrid|plugins|bundle|generated|regression|[Tt]est.js|[Ss]pecs.js|[Ss]pec.js|\.spec\.js$/,
|
|
||||||
},
|
},
|
||||||
|
enforce: 'post',
|
||||||
|
exclude: /node_modules|slickgrid|plugins|bundle|generated|regression|[Tt]est.js|[Ss]pecs.js|[Ss]pec.js|\.spec\.js$/,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
resolve: {
|
resolve: {
|
||||||
extensions: ['.js', '.jsx'],
|
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
||||||
alias: {
|
alias: {
|
||||||
'top': path.join(__dirname, './pgadmin'),
|
'top': path.join(__dirname, './pgadmin'),
|
||||||
'jquery': path.join(__dirname, './node_modules/jquery/dist/jquery'),
|
'jquery': path.join(__dirname, './node_modules/jquery/dist/jquery'),
|
||||||
@ -173,6 +183,7 @@ module.exports = {
|
|||||||
'pgadmin.alertifyjs': sourcesDir + '/js/alertify.pgadmin.defaults',
|
'pgadmin.alertifyjs': sourcesDir + '/js/alertify.pgadmin.defaults',
|
||||||
'pgadmin.backgrid': sourcesDir + '/js/backgrid.pgadmin',
|
'pgadmin.backgrid': sourcesDir + '/js/backgrid.pgadmin',
|
||||||
'pgadmin.backform': sourcesDir + '/js/backform.pgadmin',
|
'pgadmin.backform': sourcesDir + '/js/backform.pgadmin',
|
||||||
|
'pgadmin4-tree': path.join(__dirname, 'node_modules/pgadmin4-tree'),
|
||||||
'pgbrowser': path.resolve(__dirname, 'regression/javascript/fake_browser'),
|
'pgbrowser': path.resolve(__dirname, 'regression/javascript/fake_browser'),
|
||||||
'pgadmin.schema.dir': path.resolve(__dirname, 'pgadmin/browser/server_groups/servers/databases/schemas/static/js'),
|
'pgadmin.schema.dir': path.resolve(__dirname, 'pgadmin/browser/server_groups/servers/databases/schemas/static/js'),
|
||||||
'pgadmin.browser.layout': path.join(__dirname, './pgadmin/browser/static/js/layout'),
|
'pgadmin.browser.layout': path.join(__dirname, './pgadmin/browser/static/js/layout'),
|
||||||
|
459
web/yarn.lock
459
web/yarn.lock
@ -16,11 +16,23 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/highlight" "^7.12.13"
|
"@babel/highlight" "^7.12.13"
|
||||||
|
|
||||||
|
"@babel/code-frame@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb"
|
||||||
|
integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/highlight" "^7.14.5"
|
||||||
|
|
||||||
"@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.8":
|
"@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.8":
|
||||||
version "7.13.8"
|
version "7.13.8"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6"
|
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6"
|
||||||
integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog==
|
integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog==
|
||||||
|
|
||||||
|
"@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7":
|
||||||
|
version "7.14.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08"
|
||||||
|
integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==
|
||||||
|
|
||||||
"@babel/core@^7.10.2", "@babel/core@^7.7.5":
|
"@babel/core@^7.10.2", "@babel/core@^7.7.5":
|
||||||
version "7.13.8"
|
version "7.13.8"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.8.tgz#c191d9c5871788a591d69ea1dc03e5843a3680fb"
|
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.8.tgz#c191d9c5871788a591d69ea1dc03e5843a3680fb"
|
||||||
@ -68,6 +80,15 @@
|
|||||||
jsesc "^2.5.1"
|
jsesc "^2.5.1"
|
||||||
source-map "^0.5.0"
|
source-map "^0.5.0"
|
||||||
|
|
||||||
|
"@babel/generator@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785"
|
||||||
|
integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.14.5"
|
||||||
|
jsesc "^2.5.1"
|
||||||
|
source-map "^0.5.0"
|
||||||
|
|
||||||
"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13":
|
"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13":
|
||||||
version "7.12.13"
|
version "7.12.13"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab"
|
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab"
|
||||||
@ -75,6 +96,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.12.13"
|
"@babel/types" "^7.12.13"
|
||||||
|
|
||||||
|
"@babel/helper-annotate-as-pure@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61"
|
||||||
|
integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.14.5"
|
||||||
|
|
||||||
"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13":
|
"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13":
|
||||||
version "7.12.13"
|
version "7.12.13"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc"
|
resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc"
|
||||||
@ -93,6 +121,16 @@
|
|||||||
browserslist "^4.14.5"
|
browserslist "^4.14.5"
|
||||||
semver "^6.3.0"
|
semver "^6.3.0"
|
||||||
|
|
||||||
|
"@babel/helper-compilation-targets@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf"
|
||||||
|
integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/compat-data" "^7.14.5"
|
||||||
|
"@babel/helper-validator-option" "^7.14.5"
|
||||||
|
browserslist "^4.16.6"
|
||||||
|
semver "^6.3.0"
|
||||||
|
|
||||||
"@babel/helper-create-class-features-plugin@^7.13.0":
|
"@babel/helper-create-class-features-plugin@^7.13.0":
|
||||||
version "7.13.8"
|
version "7.13.8"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.8.tgz#0367bd0a7505156ce018ca464f7ac91ba58c1a04"
|
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.8.tgz#0367bd0a7505156ce018ca464f7ac91ba58c1a04"
|
||||||
@ -104,6 +142,18 @@
|
|||||||
"@babel/helper-replace-supers" "^7.13.0"
|
"@babel/helper-replace-supers" "^7.13.0"
|
||||||
"@babel/helper-split-export-declaration" "^7.12.13"
|
"@babel/helper-split-export-declaration" "^7.12.13"
|
||||||
|
|
||||||
|
"@babel/helper-create-class-features-plugin@^7.14.6":
|
||||||
|
version "7.14.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542"
|
||||||
|
integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-annotate-as-pure" "^7.14.5"
|
||||||
|
"@babel/helper-function-name" "^7.14.5"
|
||||||
|
"@babel/helper-member-expression-to-functions" "^7.14.5"
|
||||||
|
"@babel/helper-optimise-call-expression" "^7.14.5"
|
||||||
|
"@babel/helper-replace-supers" "^7.14.5"
|
||||||
|
"@babel/helper-split-export-declaration" "^7.14.5"
|
||||||
|
|
||||||
"@babel/helper-create-regexp-features-plugin@^7.12.13":
|
"@babel/helper-create-regexp-features-plugin@^7.12.13":
|
||||||
version "7.14.3"
|
version "7.14.3"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz#149aa6d78c016e318c43e2409a0ae9c136a86688"
|
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz#149aa6d78c016e318c43e2409a0ae9c136a86688"
|
||||||
@ -142,6 +192,15 @@
|
|||||||
"@babel/template" "^7.12.13"
|
"@babel/template" "^7.12.13"
|
||||||
"@babel/types" "^7.14.2"
|
"@babel/types" "^7.14.2"
|
||||||
|
|
||||||
|
"@babel/helper-function-name@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4"
|
||||||
|
integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-get-function-arity" "^7.14.5"
|
||||||
|
"@babel/template" "^7.14.5"
|
||||||
|
"@babel/types" "^7.14.5"
|
||||||
|
|
||||||
"@babel/helper-get-function-arity@^7.12.13":
|
"@babel/helper-get-function-arity@^7.12.13":
|
||||||
version "7.12.13"
|
version "7.12.13"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583"
|
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583"
|
||||||
@ -149,6 +208,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.12.13"
|
"@babel/types" "^7.12.13"
|
||||||
|
|
||||||
|
"@babel/helper-get-function-arity@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815"
|
||||||
|
integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.14.5"
|
||||||
|
|
||||||
"@babel/helper-hoist-variables@^7.13.0":
|
"@babel/helper-hoist-variables@^7.13.0":
|
||||||
version "7.13.0"
|
version "7.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8"
|
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8"
|
||||||
@ -157,6 +223,13 @@
|
|||||||
"@babel/traverse" "^7.13.0"
|
"@babel/traverse" "^7.13.0"
|
||||||
"@babel/types" "^7.13.0"
|
"@babel/types" "^7.13.0"
|
||||||
|
|
||||||
|
"@babel/helper-hoist-variables@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d"
|
||||||
|
integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.14.5"
|
||||||
|
|
||||||
"@babel/helper-member-expression-to-functions@^7.13.0":
|
"@babel/helper-member-expression-to-functions@^7.13.0":
|
||||||
version "7.13.0"
|
version "7.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091"
|
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091"
|
||||||
@ -164,6 +237,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.13.0"
|
"@babel/types" "^7.13.0"
|
||||||
|
|
||||||
|
"@babel/helper-member-expression-to-functions@^7.14.5":
|
||||||
|
version "7.14.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970"
|
||||||
|
integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.14.5"
|
||||||
|
|
||||||
"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12":
|
"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12":
|
||||||
version "7.13.12"
|
version "7.13.12"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977"
|
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977"
|
||||||
@ -193,11 +273,23 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.12.13"
|
"@babel/types" "^7.12.13"
|
||||||
|
|
||||||
|
"@babel/helper-optimise-call-expression@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c"
|
||||||
|
integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.14.5"
|
||||||
|
|
||||||
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
|
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
|
||||||
version "7.13.0"
|
version "7.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af"
|
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af"
|
||||||
integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==
|
integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==
|
||||||
|
|
||||||
|
"@babel/helper-plugin-utils@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"
|
||||||
|
integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==
|
||||||
|
|
||||||
"@babel/helper-remap-async-to-generator@^7.13.0":
|
"@babel/helper-remap-async-to-generator@^7.13.0":
|
||||||
version "7.13.0"
|
version "7.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209"
|
resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209"
|
||||||
@ -217,6 +309,16 @@
|
|||||||
"@babel/traverse" "^7.13.0"
|
"@babel/traverse" "^7.13.0"
|
||||||
"@babel/types" "^7.13.0"
|
"@babel/types" "^7.13.0"
|
||||||
|
|
||||||
|
"@babel/helper-replace-supers@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94"
|
||||||
|
integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-member-expression-to-functions" "^7.14.5"
|
||||||
|
"@babel/helper-optimise-call-expression" "^7.14.5"
|
||||||
|
"@babel/traverse" "^7.14.5"
|
||||||
|
"@babel/types" "^7.14.5"
|
||||||
|
|
||||||
"@babel/helper-simple-access@^7.12.13":
|
"@babel/helper-simple-access@^7.12.13":
|
||||||
version "7.13.12"
|
version "7.13.12"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6"
|
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6"
|
||||||
@ -238,16 +340,38 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.12.13"
|
"@babel/types" "^7.12.13"
|
||||||
|
|
||||||
|
"@babel/helper-split-export-declaration@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a"
|
||||||
|
integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.14.5"
|
||||||
|
|
||||||
"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0":
|
"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0":
|
||||||
version "7.14.0"
|
version "7.14.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
|
||||||
integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
|
integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
|
||||||
|
|
||||||
|
"@babel/helper-validator-identifier@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8"
|
||||||
|
integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==
|
||||||
|
|
||||||
|
"@babel/helper-validator-identifier@^7.14.9":
|
||||||
|
version "7.14.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48"
|
||||||
|
integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==
|
||||||
|
|
||||||
"@babel/helper-validator-option@^7.12.17":
|
"@babel/helper-validator-option@^7.12.17":
|
||||||
version "7.12.17"
|
version "7.12.17"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831"
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831"
|
||||||
integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==
|
integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==
|
||||||
|
|
||||||
|
"@babel/helper-validator-option@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
|
||||||
|
integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
|
||||||
|
|
||||||
"@babel/helper-wrap-function@^7.13.0":
|
"@babel/helper-wrap-function@^7.13.0":
|
||||||
version "7.13.0"
|
version "7.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4"
|
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4"
|
||||||
@ -276,11 +400,25 @@
|
|||||||
chalk "^2.0.0"
|
chalk "^2.0.0"
|
||||||
js-tokens "^4.0.0"
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
|
"@babel/highlight@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"
|
||||||
|
integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-validator-identifier" "^7.14.5"
|
||||||
|
chalk "^2.0.0"
|
||||||
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
"@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.4":
|
"@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.4":
|
||||||
version "7.13.9"
|
version "7.13.9"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.9.tgz#ca34cb95e1c2dd126863a84465ae8ef66114be99"
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.9.tgz#ca34cb95e1c2dd126863a84465ae8ef66114be99"
|
||||||
integrity sha512-nEUfRiARCcaVo3ny3ZQjURjHQZUo/JkEw7rLlSZy/psWGnvwXFtPcr6jb7Yb41DVW5LTe6KRq9LGleRNsg1Frw==
|
integrity sha512-nEUfRiARCcaVo3ny3ZQjURjHQZUo/JkEw7rLlSZy/psWGnvwXFtPcr6jb7Yb41DVW5LTe6KRq9LGleRNsg1Frw==
|
||||||
|
|
||||||
|
"@babel/parser@^7.14.5", "@babel/parser@^7.14.7":
|
||||||
|
version "7.14.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595"
|
||||||
|
integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==
|
||||||
|
|
||||||
"@babel/plugin-proposal-async-generator-functions@^7.13.8":
|
"@babel/plugin-proposal-async-generator-functions@^7.13.8":
|
||||||
version "7.13.8"
|
version "7.13.8"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1"
|
||||||
@ -346,7 +484,18 @@
|
|||||||
"@babel/helper-plugin-utils" "^7.13.0"
|
"@babel/helper-plugin-utils" "^7.13.0"
|
||||||
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
|
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
|
||||||
|
|
||||||
"@babel/plugin-proposal-object-rest-spread@^7.13.8", "@babel/plugin-proposal-object-rest-spread@^7.9.6":
|
"@babel/plugin-proposal-object-rest-spread@^7.10.1":
|
||||||
|
version "7.14.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363"
|
||||||
|
integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==
|
||||||
|
dependencies:
|
||||||
|
"@babel/compat-data" "^7.14.7"
|
||||||
|
"@babel/helper-compilation-targets" "^7.14.5"
|
||||||
|
"@babel/helper-plugin-utils" "^7.14.5"
|
||||||
|
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
|
||||||
|
"@babel/plugin-transform-parameters" "^7.14.5"
|
||||||
|
|
||||||
|
"@babel/plugin-proposal-object-rest-spread@^7.13.8":
|
||||||
version "7.13.8"
|
version "7.13.8"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a"
|
||||||
integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==
|
integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==
|
||||||
@ -481,6 +630,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.12.13"
|
"@babel/helper-plugin-utils" "^7.12.13"
|
||||||
|
|
||||||
|
"@babel/plugin-syntax-typescript@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716"
|
||||||
|
integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-plugin-utils" "^7.14.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-arrow-functions@^7.13.0":
|
"@babel/plugin-transform-arrow-functions@^7.13.0":
|
||||||
version "7.13.0"
|
version "7.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae"
|
||||||
@ -657,6 +813,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.13.0"
|
"@babel/helper-plugin-utils" "^7.13.0"
|
||||||
|
|
||||||
|
"@babel/plugin-transform-parameters@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3"
|
||||||
|
integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-plugin-utils" "^7.14.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-property-literals@^7.12.13":
|
"@babel/plugin-transform-property-literals@^7.12.13":
|
||||||
version "7.12.13"
|
version "7.12.13"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81"
|
||||||
@ -758,6 +921,15 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.12.13"
|
"@babel/helper-plugin-utils" "^7.12.13"
|
||||||
|
|
||||||
|
"@babel/plugin-transform-typescript@^7.14.5":
|
||||||
|
version "7.14.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz#6e9c2d98da2507ebe0a883b100cde3c7279df36c"
|
||||||
|
integrity sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-create-class-features-plugin" "^7.14.6"
|
||||||
|
"@babel/helper-plugin-utils" "^7.14.5"
|
||||||
|
"@babel/plugin-syntax-typescript" "^7.14.5"
|
||||||
|
|
||||||
"@babel/plugin-transform-unicode-escapes@^7.12.13":
|
"@babel/plugin-transform-unicode-escapes@^7.12.13":
|
||||||
version "7.12.13"
|
version "7.12.13"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74"
|
||||||
@ -870,10 +1042,19 @@
|
|||||||
"@babel/plugin-transform-react-jsx-development" "^7.12.17"
|
"@babel/plugin-transform-react-jsx-development" "^7.12.17"
|
||||||
"@babel/plugin-transform-react-pure-annotations" "^7.12.1"
|
"@babel/plugin-transform-react-pure-annotations" "^7.12.1"
|
||||||
|
|
||||||
|
"@babel/preset-typescript@^7.8.3":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz#aa98de119cf9852b79511f19e7f44a2d379bcce0"
|
||||||
|
integrity sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-plugin-utils" "^7.14.5"
|
||||||
|
"@babel/helper-validator-option" "^7.14.5"
|
||||||
|
"@babel/plugin-transform-typescript" "^7.14.5"
|
||||||
|
|
||||||
"@babel/runtime@^7.0.0":
|
"@babel/runtime@^7.0.0":
|
||||||
version "7.15.4"
|
version "7.14.6"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a"
|
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d"
|
||||||
integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==
|
integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==
|
||||||
dependencies:
|
dependencies:
|
||||||
regenerator-runtime "^0.13.4"
|
regenerator-runtime "^0.13.4"
|
||||||
|
|
||||||
@ -900,6 +1081,15 @@
|
|||||||
"@babel/parser" "^7.12.13"
|
"@babel/parser" "^7.12.13"
|
||||||
"@babel/types" "^7.12.13"
|
"@babel/types" "^7.12.13"
|
||||||
|
|
||||||
|
"@babel/template@^7.14.5":
|
||||||
|
version "7.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"
|
||||||
|
integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==
|
||||||
|
dependencies:
|
||||||
|
"@babel/code-frame" "^7.14.5"
|
||||||
|
"@babel/parser" "^7.14.5"
|
||||||
|
"@babel/types" "^7.14.5"
|
||||||
|
|
||||||
"@babel/traverse@^7.13.0", "@babel/traverse@^7.4.5":
|
"@babel/traverse@^7.13.0", "@babel/traverse@^7.4.5":
|
||||||
version "7.13.0"
|
version "7.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc"
|
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc"
|
||||||
@ -915,6 +1105,21 @@
|
|||||||
globals "^11.1.0"
|
globals "^11.1.0"
|
||||||
lodash "^4.17.19"
|
lodash "^4.17.19"
|
||||||
|
|
||||||
|
"@babel/traverse@^7.14.5":
|
||||||
|
version "7.14.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753"
|
||||||
|
integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/code-frame" "^7.14.5"
|
||||||
|
"@babel/generator" "^7.14.5"
|
||||||
|
"@babel/helper-function-name" "^7.14.5"
|
||||||
|
"@babel/helper-hoist-variables" "^7.14.5"
|
||||||
|
"@babel/helper-split-export-declaration" "^7.14.5"
|
||||||
|
"@babel/parser" "^7.14.7"
|
||||||
|
"@babel/types" "^7.14.5"
|
||||||
|
debug "^4.1.0"
|
||||||
|
globals "^11.1.0"
|
||||||
|
|
||||||
"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.13.0", "@babel/types@^7.4.4":
|
"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.13.0", "@babel/types@^7.4.4":
|
||||||
version "7.13.0"
|
version "7.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80"
|
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80"
|
||||||
@ -932,6 +1137,14 @@
|
|||||||
"@babel/helper-validator-identifier" "^7.14.0"
|
"@babel/helper-validator-identifier" "^7.14.0"
|
||||||
to-fast-properties "^2.0.0"
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
|
"@babel/types@^7.14.5":
|
||||||
|
version "7.15.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.4.tgz#74eeb86dbd6748d2741396557b9860e57fce0a0d"
|
||||||
|
integrity sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-validator-identifier" "^7.14.9"
|
||||||
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
"@date-io/core@1.x", "@date-io/core@^1.3.13":
|
"@date-io/core@1.x", "@date-io/core@^1.3.13":
|
||||||
version "1.3.13"
|
version "1.3.13"
|
||||||
resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa"
|
resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa"
|
||||||
@ -1326,6 +1539,13 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669"
|
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669"
|
||||||
integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==
|
integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==
|
||||||
|
|
||||||
|
"@types/classnames@^2.2.6":
|
||||||
|
version "2.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.3.1.tgz#3c2467aa0f1a93f1f021e3b9bcf938bd5dfdc0dd"
|
||||||
|
integrity sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==
|
||||||
|
dependencies:
|
||||||
|
classnames "*"
|
||||||
|
|
||||||
"@types/component-emitter@^1.2.10":
|
"@types/component-emitter@^1.2.10":
|
||||||
version "1.2.10"
|
version "1.2.10"
|
||||||
resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea"
|
resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea"
|
||||||
@ -1405,6 +1625,13 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24"
|
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24"
|
||||||
integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
|
integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
|
||||||
|
|
||||||
|
"@types/react-dom@^16.0.11":
|
||||||
|
version "16.9.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.13.tgz#5898f0ee68fe200685e6b61d3d7d8828692814d0"
|
||||||
|
integrity sha512-34Hr3XnmUSJbUVDxIw/e7dhQn2BJZhJmlAaPyPwfTQyuVS9mV/CeyghFcXyvkJXxI7notQJz8mF8FeCVvloJrA==
|
||||||
|
dependencies:
|
||||||
|
"@types/react" "^16"
|
||||||
|
|
||||||
"@types/react-transition-group@^4.2.0":
|
"@types/react-transition-group@^4.2.0":
|
||||||
version "4.4.1"
|
version "4.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.1.tgz#e1a3cb278df7f47f17b5082b1b3da17170bd44b1"
|
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.1.tgz#e1a3cb278df7f47f17b5082b1b3da17170bd44b1"
|
||||||
@ -1421,6 +1648,15 @@
|
|||||||
"@types/scheduler" "*"
|
"@types/scheduler" "*"
|
||||||
csstype "^3.0.2"
|
csstype "^3.0.2"
|
||||||
|
|
||||||
|
"@types/react@^16", "@types/react@^16.7.18":
|
||||||
|
version "16.14.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.10.tgz#76bc1c42ed5ab0d2ab13e5c58faaccaad3449477"
|
||||||
|
integrity sha512-QadBsMyF6ldjEAXEhsmEW/L0uBDJT8yw7Qoe5sRnEKVrzMkiYoJwqoL5TKJOlArsn/wvIJM/XdVzkdL6+AS64Q==
|
||||||
|
dependencies:
|
||||||
|
"@types/prop-types" "*"
|
||||||
|
"@types/scheduler" "*"
|
||||||
|
csstype "^3.0.2"
|
||||||
|
|
||||||
"@types/scheduler@*":
|
"@types/scheduler@*":
|
||||||
version "0.16.1"
|
version "0.16.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275"
|
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275"
|
||||||
@ -1696,7 +1932,12 @@ airbnb-prop-types@^2.16.0:
|
|||||||
prop-types-exact "^1.2.0"
|
prop-types-exact "^1.2.0"
|
||||||
react-is "^16.13.1"
|
react-is "^16.13.1"
|
||||||
|
|
||||||
ajv-keywords@^3.5.2:
|
ajv-errors@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
|
||||||
|
integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
|
||||||
|
|
||||||
|
ajv-keywords@^3.1.0, ajv-keywords@^3.5.2:
|
||||||
version "3.5.2"
|
version "3.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
|
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
|
||||||
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
|
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
|
||||||
@ -1711,7 +1952,7 @@ ajv@^5.0.0:
|
|||||||
fast-json-stable-stringify "^2.0.0"
|
fast-json-stable-stringify "^2.0.0"
|
||||||
json-schema-traverse "^0.3.0"
|
json-schema-traverse "^0.3.0"
|
||||||
|
|
||||||
ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.12.6:
|
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.12.6:
|
||||||
version "6.12.6"
|
version "6.12.6"
|
||||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
||||||
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||||
@ -1895,6 +2136,30 @@ asn1@~0.2.3:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safer-buffer "~2.1.0"
|
safer-buffer "~2.1.0"
|
||||||
|
|
||||||
|
aspen-core@^1.0.4:
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/aspen-core/-/aspen-core-1.0.4.tgz#a2d6a23c80303e73aaa836c124c116e447ba7a7d"
|
||||||
|
integrity sha512-mQ79JxHstB2rf47Zgw2yduAH9L47b+3bwQtpbEAKeSJsLTPe8X7lsQ6lLP3tFbS204TNILC5LxSkVWv45FXQYg==
|
||||||
|
dependencies:
|
||||||
|
notificar "^1.0.1"
|
||||||
|
p-series "^1.1.0"
|
||||||
|
path-fx "^2.1.1"
|
||||||
|
|
||||||
|
aspen-decorations@^1.0.2, aspen-decorations@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/aspen-decorations/-/aspen-decorations-1.1.1.tgz#7d0ca740efab1aa4fd91a1f3db81ac29186607a3"
|
||||||
|
integrity sha512-Ej2tv0Gz3bnhkNCyzzjDeG2V5vd49T30ca0SKywHuLA5RKrZ1NutEyZnUYku4WmUV1/TdpHRiSJ759nbZK4xtQ==
|
||||||
|
dependencies:
|
||||||
|
notificar "^1.0.1"
|
||||||
|
|
||||||
|
aspen-tree-model@^1.0.5:
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/aspen-tree-model/-/aspen-tree-model-1.0.5.tgz#23d5ce7a8fb7ab905d37b17b930cc6f92e4d366e"
|
||||||
|
integrity sha512-kcdL22iAT1sp1HTQ3wJnQqSeA2ANSQiOZJ86RMk9tKBZjb5EFSs2khEFQ6iYE7bvHcWTarGzD7X8XKfxe/zxXg==
|
||||||
|
dependencies:
|
||||||
|
aspen-core "^1.0.4"
|
||||||
|
notificar "^1.0.1"
|
||||||
|
|
||||||
assert-plus@1.0.0, assert-plus@^1.0.0:
|
assert-plus@1.0.0, assert-plus@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
||||||
@ -1918,6 +2183,13 @@ async@0.9.x:
|
|||||||
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
|
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
|
||||||
integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
|
integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
|
||||||
|
|
||||||
|
async@^2.1.4:
|
||||||
|
version "2.6.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
|
||||||
|
integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
|
||||||
|
dependencies:
|
||||||
|
lodash "^4.17.14"
|
||||||
|
|
||||||
async@^3.2.0:
|
async@^3.2.0:
|
||||||
version "3.2.0"
|
version "3.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
|
resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
|
||||||
@ -2391,6 +2663,14 @@ browser-resolve@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
resolve "^1.17.0"
|
resolve "^1.17.0"
|
||||||
|
|
||||||
|
browserfs@^1.4.3:
|
||||||
|
version "1.4.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/browserfs/-/browserfs-1.4.3.tgz#92ffc6063967612daccdb8566d3fc03f521205fb"
|
||||||
|
integrity sha512-tz8HClVrzTJshcyIu8frE15cjqjcBIu15Bezxsvl/i+6f59iNCN3kznlWjz0FEb3DlnDx3gW5szxeT6D1x0s0w==
|
||||||
|
dependencies:
|
||||||
|
async "^2.1.4"
|
||||||
|
pako "^1.0.4"
|
||||||
|
|
||||||
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
|
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
|
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
|
||||||
@ -2809,6 +3089,11 @@ circular-json-es6@^2.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/circular-json-es6/-/circular-json-es6-2.0.2.tgz#e4f4a093e49fb4b6aba1157365746112a78bd344"
|
resolved "https://registry.yarnpkg.com/circular-json-es6/-/circular-json-es6-2.0.2.tgz#e4f4a093e49fb4b6aba1157365746112a78bd344"
|
||||||
integrity sha512-ODYONMMNb3p658Zv+Pp+/XPa5s6q7afhz3Tzyvo+VRh9WIrJ64J76ZC4GQxnlye/NesTn09jvOiuE8+xxfpwhQ==
|
integrity sha512-ODYONMMNb3p658Zv+Pp+/XPa5s6q7afhz3Tzyvo+VRh9WIrJ64J76ZC4GQxnlye/NesTn09jvOiuE8+xxfpwhQ==
|
||||||
|
|
||||||
|
classnames@*, classnames@^2.2.6:
|
||||||
|
version "2.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
|
||||||
|
integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
|
||||||
|
|
||||||
cliui@^7.0.2:
|
cliui@^7.0.2:
|
||||||
version "7.0.4"
|
version "7.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
|
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
|
||||||
@ -3026,6 +3311,13 @@ content-type@~1.0.4:
|
|||||||
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
|
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
|
||||||
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
|
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
|
||||||
|
|
||||||
|
context-menu@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/context-menu/-/context-menu-2.0.0.tgz#565f13210248e3442700e6b1a2d63406f2b08552"
|
||||||
|
integrity sha512-VQrkvcJDevuq+sde0QADRLOdIRpa4a1ti4knstrPILDLfWU/RB4ZIGpj32Chh/mURjrbi0CoLT1eonr3X86Khg==
|
||||||
|
dependencies:
|
||||||
|
tiny-emitter "^2.0.2"
|
||||||
|
|
||||||
convert-source-map@^1.1.3, convert-source-map@^1.5.0, convert-source-map@^1.7.0:
|
convert-source-map@^1.1.3, convert-source-map@^1.5.0, convert-source-map@^1.7.0:
|
||||||
version "1.7.0"
|
version "1.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
|
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
|
||||||
@ -5290,6 +5582,11 @@ inline-style-parser@0.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
|
resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
|
||||||
integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
|
integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
|
||||||
|
|
||||||
|
insert-if@^1.1.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/insert-if/-/insert-if-1.2.0.tgz#5b878ead294a727eb75598ef8cf9244f33e17157"
|
||||||
|
integrity sha512-UFXvgVVosbyfa7tsowU8nOLHp/fGe7oGi5vYMy9wEQio8olkf+P7sHssmYnUe991du5EDlD+n/5cW17WgM7Cog==
|
||||||
|
|
||||||
insert-module-globals@^7.2.1:
|
insert-module-globals@^7.2.1:
|
||||||
version "7.2.1"
|
version "7.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.1.tgz#d5e33185181a4e1f33b15f7bf100ee91890d5cb3"
|
resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.1.tgz#d5e33185181a4e1f33b15f7bf100ee91890d5cb3"
|
||||||
@ -5535,6 +5832,13 @@ is-regex@^1.1.3:
|
|||||||
call-bind "^1.0.2"
|
call-bind "^1.0.2"
|
||||||
has-symbols "^1.0.2"
|
has-symbols "^1.0.2"
|
||||||
|
|
||||||
|
is-relative@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
|
||||||
|
integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==
|
||||||
|
dependencies:
|
||||||
|
is-unc-path "^1.0.0"
|
||||||
|
|
||||||
is-resolvable@^1.1.0:
|
is-resolvable@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
|
resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
|
||||||
@ -5595,6 +5899,13 @@ is-typedarray@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||||
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
||||||
|
|
||||||
|
is-unc-path@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
|
||||||
|
integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==
|
||||||
|
dependencies:
|
||||||
|
unc-path-regex "^0.1.2"
|
||||||
|
|
||||||
is-utf8@^0.2.0:
|
is-utf8@^0.2.0:
|
||||||
version "0.2.1"
|
version "0.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
|
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
|
||||||
@ -6174,7 +6485,7 @@ loader-runner@^4.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384"
|
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384"
|
||||||
integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==
|
integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==
|
||||||
|
|
||||||
loader-utils@^1.1.0, loader-utils@^1.4.0:
|
loader-utils@^1.0.3, loader-utils@^1.1.0, loader-utils@^1.4.0:
|
||||||
version "1.4.0"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
|
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
|
||||||
integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
|
integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
|
||||||
@ -6496,7 +6807,7 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24:
|
|||||||
dependencies:
|
dependencies:
|
||||||
mime-db "1.46.0"
|
mime-db "1.46.0"
|
||||||
|
|
||||||
mime@^2.3.1, mime@^2.4.5:
|
mime@^2.0.3, mime@^2.3.1, mime@^2.4.5:
|
||||||
version "2.5.2"
|
version "2.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe"
|
resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe"
|
||||||
integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==
|
integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==
|
||||||
@ -6790,6 +7101,11 @@ normalize-url@^4.5.0:
|
|||||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
|
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
|
||||||
integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
|
integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
|
||||||
|
|
||||||
|
notificar@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/notificar/-/notificar-1.0.1.tgz#11ba233c261eee02f5d688ee300ece5f72522887"
|
||||||
|
integrity sha512-jiCay0IY0N+gloyDks+v4WV+OKU4lIXUhQgxw4Iu9bXpw80cNXTezVv46OCK5+E8G8fkt1Bj76DNepULqlQS3Q==
|
||||||
|
|
||||||
npm-conf@^1.1.0:
|
npm-conf@^1.1.0:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
|
resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9"
|
||||||
@ -7064,6 +7380,14 @@ p-reduce@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
|
resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
|
||||||
integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
|
integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
|
||||||
|
|
||||||
|
p-series@^1.0.0, p-series@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-series/-/p-series-1.1.0.tgz#f2d8522cdfd58b464eb9685651d465037ee3c957"
|
||||||
|
integrity sha512-356covArc9UCfj2twY/sxCJKGMzzO+pJJtucizsPC6aS1xKSTBc9PQrQhvFR3+7F+fa2KBKdJjdIcv6NEWDcIQ==
|
||||||
|
dependencies:
|
||||||
|
"@sindresorhus/is" "^0.7.0"
|
||||||
|
p-reduce "^1.0.0"
|
||||||
|
|
||||||
p-timeout@^1.1.1:
|
p-timeout@^1.1.1:
|
||||||
version "1.2.1"
|
version "1.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"
|
resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"
|
||||||
@ -7083,7 +7407,7 @@ p-try@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
||||||
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
|
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
|
||||||
|
|
||||||
pako@^1.0.0, pako@~1.0.5:
|
pako@^1.0.0, pako@^1.0.4, pako@~1.0.5:
|
||||||
version "1.0.11"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
|
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
|
||||||
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
|
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
|
||||||
@ -7174,6 +7498,13 @@ path-exists@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
||||||
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
|
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
|
||||||
|
|
||||||
|
path-fx@^2.0.0, path-fx@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-fx/-/path-fx-2.1.1.tgz#51594f9f8223d5c1d5b74be55f20a7abb18dc9f6"
|
||||||
|
integrity sha512-YQeSXseFrHZtxesLJVK4AGv/J3bPmmb0mAMeUbf52b2MVwLlzTEY2NatLP8mUE7eR0F4EBOIRmrQjPPvHZI2+Q==
|
||||||
|
dependencies:
|
||||||
|
is-relative "^1.0.0"
|
||||||
|
|
||||||
path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
|
path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||||
@ -7246,6 +7577,26 @@ performance-now@^2.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||||
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
||||||
|
|
||||||
|
"pgadmin4-tree@git+https://github.com/EnterpriseDB/pgadmin4-treeview/#b09740eb89595f99a925aaca9be5afa4be0fa3cc":
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "git+https://github.com/EnterpriseDB/pgadmin4-treeview/#b09740eb89595f99a925aaca9be5afa4be0fa3cc"
|
||||||
|
dependencies:
|
||||||
|
"@types/classnames" "^2.2.6"
|
||||||
|
"@types/react" "^16.7.18"
|
||||||
|
"@types/react-dom" "^16.0.11"
|
||||||
|
aspen-decorations "^1.1.1"
|
||||||
|
browserfs "^1.4.3"
|
||||||
|
classnames "^2.2.6"
|
||||||
|
context-menu "^2.0.0"
|
||||||
|
insert-if "^1.1.0"
|
||||||
|
lodash "4.*"
|
||||||
|
notificar "^1.0.1"
|
||||||
|
path-fx "^2.0.0"
|
||||||
|
react "^16.6.3"
|
||||||
|
react-aspen "^1.1.1"
|
||||||
|
react-dom "^16.6.3"
|
||||||
|
valid-filename "^2.0.1"
|
||||||
|
|
||||||
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
|
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
|
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
|
||||||
@ -7782,6 +8133,27 @@ raw-body@2.4.0:
|
|||||||
iconv-lite "0.4.24"
|
iconv-lite "0.4.24"
|
||||||
unpipe "1.0.0"
|
unpipe "1.0.0"
|
||||||
|
|
||||||
|
react-aspen@^1.1.0, react-aspen@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-aspen/-/react-aspen-1.1.1.tgz#61a85ef43748158322c4a3b73faaa5e563edd038"
|
||||||
|
integrity sha512-m+r+UIAw29PKgt+2on7zR/fCa7dnvLeM/x2HorGPa39xm4ELHY0PhN0oyE2mO95yqha7mqexD7RXd6iKfVKv7g==
|
||||||
|
dependencies:
|
||||||
|
aspen-tree-model "^1.0.5"
|
||||||
|
notificar "^1.0.1"
|
||||||
|
p-series "^1.0.0"
|
||||||
|
path-fx "^2.1.1"
|
||||||
|
react-window "^1.3.1"
|
||||||
|
|
||||||
|
react-dom@^16.6.3:
|
||||||
|
version "16.14.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89"
|
||||||
|
integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==
|
||||||
|
dependencies:
|
||||||
|
loose-envify "^1.1.0"
|
||||||
|
object-assign "^4.1.1"
|
||||||
|
prop-types "^15.6.2"
|
||||||
|
scheduler "^0.19.1"
|
||||||
|
|
||||||
react-dom@^17.0.1:
|
react-dom@^17.0.1:
|
||||||
version "17.0.2"
|
version "17.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
|
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
|
||||||
@ -7869,7 +8241,7 @@ react-virtualized-auto-sizer@^1.0.6:
|
|||||||
resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.6.tgz#66c5b1c9278064c5ef1699ed40a29c11518f97ca"
|
resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.6.tgz#66c5b1c9278064c5ef1699ed40a29c11518f97ca"
|
||||||
integrity sha512-7tQ0BmZqfVF6YYEWcIGuoR3OdYe8I/ZFbNclFlGOC3pMqunkYF/oL30NCjSGl9sMEb17AnzixDz98Kqc3N76HQ==
|
integrity sha512-7tQ0BmZqfVF6YYEWcIGuoR3OdYe8I/ZFbNclFlGOC3pMqunkYF/oL30NCjSGl9sMEb17AnzixDz98Kqc3N76HQ==
|
||||||
|
|
||||||
react-window@^1.8.5:
|
react-window@^1.3.1, react-window@^1.8.5:
|
||||||
version "1.8.6"
|
version "1.8.6"
|
||||||
resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.6.tgz#d011950ac643a994118632665aad0c6382e2a112"
|
resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.6.tgz#d011950ac643a994118632665aad0c6382e2a112"
|
||||||
integrity sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg==
|
integrity sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg==
|
||||||
@ -7877,6 +8249,15 @@ react-window@^1.8.5:
|
|||||||
"@babel/runtime" "^7.0.0"
|
"@babel/runtime" "^7.0.0"
|
||||||
memoize-one ">=3.1.1 <6"
|
memoize-one ">=3.1.1 <6"
|
||||||
|
|
||||||
|
react@^16.6.3:
|
||||||
|
version "16.14.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
|
||||||
|
integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==
|
||||||
|
dependencies:
|
||||||
|
loose-envify "^1.1.0"
|
||||||
|
object-assign "^4.1.1"
|
||||||
|
prop-types "^15.6.2"
|
||||||
|
|
||||||
react@^17.0.1:
|
react@^17.0.1:
|
||||||
version "17.0.2"
|
version "17.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
|
resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
|
||||||
@ -8246,6 +8627,14 @@ sax@^1.2.4, sax@~1.2.4:
|
|||||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||||
|
|
||||||
|
scheduler@^0.19.1:
|
||||||
|
version "0.19.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
|
||||||
|
integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
|
||||||
|
dependencies:
|
||||||
|
loose-envify "^1.1.0"
|
||||||
|
object-assign "^4.1.1"
|
||||||
|
|
||||||
scheduler@^0.20.2:
|
scheduler@^0.20.2:
|
||||||
version "0.20.2"
|
version "0.20.2"
|
||||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
|
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
|
||||||
@ -8261,6 +8650,15 @@ schema-utils@^0.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ajv "^5.0.0"
|
ajv "^5.0.0"
|
||||||
|
|
||||||
|
schema-utils@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
|
||||||
|
integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
|
||||||
|
dependencies:
|
||||||
|
ajv "^6.1.0"
|
||||||
|
ajv-errors "^1.0.0"
|
||||||
|
ajv-keywords "^3.1.0"
|
||||||
|
|
||||||
schema-utils@^2.6.5:
|
schema-utils@^2.6.5:
|
||||||
version "2.7.1"
|
version "2.7.1"
|
||||||
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
|
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
|
||||||
@ -8963,7 +9361,15 @@ svgicons2svgfont@^9.0.3:
|
|||||||
string.prototype.codepointat "^0.2.1"
|
string.prototype.codepointat "^0.2.1"
|
||||||
svg-pathdata "^5.0.2"
|
svg-pathdata "^5.0.2"
|
||||||
|
|
||||||
svgo@^1.3.2:
|
svgo-loader@^2.2.0:
|
||||||
|
version "2.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/svgo-loader/-/svgo-loader-2.2.2.tgz#5f54e3e0d77c36a84c42bcb42e812c4db534bf96"
|
||||||
|
integrity sha512-UeE/4yZEK96LoYqvxwh8YqCOJCjXwRY9K6YT99vXE+nYhs/W8hAY2hNf5zg/lRsyKshJkR79V+4beV3cbGL40Q==
|
||||||
|
dependencies:
|
||||||
|
js-yaml "^3.13.1"
|
||||||
|
loader-utils "^1.0.3"
|
||||||
|
|
||||||
|
svgo@^1.1.1, svgo@^1.3.2:
|
||||||
version "1.3.2"
|
version "1.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
|
resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
|
||||||
integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
|
integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
|
||||||
@ -9150,6 +9556,11 @@ timsort@^0.3.0:
|
|||||||
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
|
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
|
||||||
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
|
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
|
||||||
|
|
||||||
|
tiny-emitter@^2.0.2:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
|
||||||
|
integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
|
||||||
|
|
||||||
tiny-warning@^1.0.2:
|
tiny-warning@^1.0.2:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
|
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
|
||||||
@ -9305,6 +9716,11 @@ typedarray@^0.0.6:
|
|||||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||||
|
|
||||||
|
typescript@^3.2.2:
|
||||||
|
version "3.9.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
|
||||||
|
integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
|
||||||
|
|
||||||
ua-parser-js@^0.7.23:
|
ua-parser-js@^0.7.23:
|
||||||
version "0.7.24"
|
version "0.7.24"
|
||||||
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.24.tgz#8d3ecea46ed4f1f1d63ec25f17d8568105dc027c"
|
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.24.tgz#8d3ecea46ed4f1f1d63ec25f17d8568105dc027c"
|
||||||
@ -9338,6 +9754,11 @@ unbzip2-stream@^1.0.9:
|
|||||||
buffer "^5.2.1"
|
buffer "^5.2.1"
|
||||||
through "^2.3.8"
|
through "^2.3.8"
|
||||||
|
|
||||||
|
unc-path-regex@^0.1.2:
|
||||||
|
version "0.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
|
||||||
|
integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
|
||||||
|
|
||||||
undeclared-identifiers@^1.1.2:
|
undeclared-identifiers@^1.1.2:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f"
|
resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f"
|
||||||
@ -9409,6 +9830,15 @@ url-join@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
|
resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
|
||||||
integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
|
integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
|
||||||
|
|
||||||
|
url-loader@^1.1.2:
|
||||||
|
version "1.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8"
|
||||||
|
integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==
|
||||||
|
dependencies:
|
||||||
|
loader-utils "^1.1.0"
|
||||||
|
mime "^2.0.3"
|
||||||
|
schema-utils "^1.0.0"
|
||||||
|
|
||||||
url-parse-lax@^1.0.0:
|
url-parse-lax@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
|
resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
|
||||||
@ -9485,6 +9915,13 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
|
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
|
||||||
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
|
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
|
||||||
|
|
||||||
|
valid-filename@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/valid-filename/-/valid-filename-2.0.1.tgz#0768d6f364b1ed3bdf68f0d15abffb0d9d6cecaf"
|
||||||
|
integrity sha1-B2jW82Sx7TvfaPDRWr/7DZ1s7K8=
|
||||||
|
dependencies:
|
||||||
|
filename-reserved-regex "^2.0.0"
|
||||||
|
|
||||||
validate-npm-package-license@^3.0.1:
|
validate-npm-package-license@^3.0.1:
|
||||||
version "3.0.4"
|
version "3.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
|
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
|
||||||
|
Loading…
Reference in New Issue
Block a user