mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-12-23 19:01:28 +00:00
Compare commits
27 Commits
fixed-pric
...
update_to_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cf3082d30d | ||
|
|
dbfa7e37ed | ||
|
|
1bf00f65b8 | ||
|
|
a20620db0e | ||
|
|
5724ed81f9 | ||
|
|
349a54e078 | ||
|
|
bf9fdb95e9 | ||
|
|
b4461ddf5d | ||
|
|
349a4bb0f2 | ||
|
|
5f977b9419 | ||
|
|
adce85efd4 | ||
|
|
292d2f3be4 | ||
|
|
5613c822db | ||
|
|
3c320167d8 | ||
|
|
2c58cd7be1 | ||
|
|
cc4f20e482 | ||
|
|
10aa097166 | ||
|
|
9e7252dfeb | ||
|
|
d8dff644d5 | ||
|
|
2855bf4c7d | ||
|
|
4ffea1bad9 | ||
|
|
3cdc30864b | ||
|
|
f4a322d17d | ||
|
|
8e033bdd73 | ||
|
|
7d2315f282 | ||
|
|
5b467e239a | ||
|
|
d65600dd14 |
@@ -43,6 +43,7 @@ module.exports = {
|
|||||||
"@typescript-eslint/no-explicit-any": "error",
|
"@typescript-eslint/no-explicit-any": "error",
|
||||||
"prefer-arrow/prefer-arrow-functions": ["error", { allowStandaloneDeclarations: true }],
|
"prefer-arrow/prefer-arrow-functions": ["error", { allowStandaloneDeclarations: true }],
|
||||||
eqeqeq: "error",
|
eqeqeq: "error",
|
||||||
|
"react/react-in-jsx-scope": "off",
|
||||||
"react/display-name": "off",
|
"react/display-name": "off",
|
||||||
"react-hooks/rules-of-hooks": "warn", // TODO: error
|
"react-hooks/rules-of-hooks": "warn", // TODO: error
|
||||||
"react-hooks/exhaustive-deps": "warn", // TODO: error
|
"react-hooks/exhaustive-deps": "warn", // TODO: error
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
presets: [["@babel/preset-env", { targets: { node: "current" } }], "@babel/preset-react", "@babel/preset-typescript"],
|
presets: [
|
||||||
|
["@babel/preset-env", { targets: { node: "current" } }],
|
||||||
|
[
|
||||||
|
"@babel/preset-react",
|
||||||
|
{
|
||||||
|
runtime: "automatic",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"@babel/preset-typescript",
|
||||||
|
],
|
||||||
plugins: [["@babel/plugin-proposal-decorators", { legacy: true }]],
|
plugins: [["@babel/plugin-proposal-decorators", { legacy: true }]],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
<svg width="14" height="10" viewBox="0 0 14 10" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<g clip-path="url(#clip0)">
|
|
||||||
<path d="M14.01 0.72999L4.81001 9.93999L0.0100098 5.17999L0.78001 4.40999L4.78001 8.40999L13.21 -0.0100098L14.01 0.72999Z" fill="#0078D4"/>
|
|
||||||
</g>
|
|
||||||
<defs>
|
|
||||||
<clipPath id="clip0">
|
|
||||||
<rect width="14" height="9.99" fill="white"/>
|
|
||||||
</clipPath>
|
|
||||||
</defs>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 371 B |
@@ -62,6 +62,8 @@ module.exports = {
|
|||||||
// "node_modules"
|
// "node_modules"
|
||||||
// ],
|
// ],
|
||||||
|
|
||||||
|
modulePaths: ["node_modules", "<rootDir>/src"],
|
||||||
|
|
||||||
// An array of file extensions your modules use
|
// An array of file extensions your modules use
|
||||||
moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "html", "svg"],
|
moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "html", "svg"],
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: wf_segoe-ui_normal;
|
font-family: wf_segoe-ui_normal;
|
||||||
src: local("Segoe UI"), url("../../fonts/segoe-ui/west-european/normal/latest.woff");
|
src: url(./fonts/segoe-ui/west-european/normal/latest.woff);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DataExplorerFont: wf_segoe-ui_normal, "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif;
|
@DataExplorerFont: wf_segoe-ui_normal, "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif;
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ table.can-select.dataTable tbody tr {
|
|||||||
table.can-select.dataTable tbody tr.selected {
|
table.can-select.dataTable tbody tr.selected {
|
||||||
color: #000000 !important;
|
color: #000000 !important;
|
||||||
/*[{datatable-row-selected-text} !important]*/
|
/*[{datatable-row-selected-text} !important]*/
|
||||||
background-color: #C9DEF5;
|
background-color: #c9def5;
|
||||||
/*[{datatable-row-selected-background}]*/
|
/*[{datatable-row-selected-background}]*/
|
||||||
border: 1px solid #b3d1f1;
|
border: 1px solid #b3d1f1;
|
||||||
/*[1px solid {datatable-row-selected-border}]*/
|
/*[1px solid {datatable-row-selected-border}]*/
|
||||||
@@ -64,23 +64,23 @@ table.can-select.dataTable tbody tr.selected td:first-child {
|
|||||||
|
|
||||||
table.can-select.dataTable.hover tbody tr:hover,
|
table.can-select.dataTable.hover tbody tr:hover,
|
||||||
table.dataTable.storage tbody tr:hover {
|
table.dataTable.storage tbody tr:hover {
|
||||||
background-color: #C9DEF5;
|
background-color: #c9def5;
|
||||||
/*[{datatable-row-hover-background}]*/
|
/*[{datatable-row-hover-background}]*/
|
||||||
}
|
}
|
||||||
|
|
||||||
table.dataTable.storage tbody tr:hover td:empty {
|
table.dataTable.storage tbody tr:hover td:empty {
|
||||||
background-color: #C9DEF5;
|
background-color: #c9def5;
|
||||||
/*[{datatable-row-hover-empty-background}]*/
|
/*[{datatable-row-hover-empty-background}]*/
|
||||||
}
|
}
|
||||||
|
|
||||||
table.can-select.dataTable.hover tbody tr:hover.selected,
|
table.can-select.dataTable.hover tbody tr:hover.selected,
|
||||||
table.can-select.dataTable.storage tbody tr:hover.selected {
|
table.can-select.dataTable.storage tbody tr:hover.selected {
|
||||||
background-color: #C9DEF5;
|
background-color: #c9def5;
|
||||||
/*[{datatable-row-selected-background}]*/
|
/*[{datatable-row-selected-background}]*/
|
||||||
}
|
}
|
||||||
|
|
||||||
table.can-select.dataTable:not(:focus) tbody tr.selected {
|
table.can-select.dataTable:not(:focus) tbody tr.selected {
|
||||||
color: #1E1E1E;
|
color: #1e1e1e;
|
||||||
/*[{datatable-row-selected-text}]*/
|
/*[{datatable-row-selected-text}]*/
|
||||||
background-color: #767676;
|
background-color: #767676;
|
||||||
/*[{datatable-row-selected-background}]*/
|
/*[{datatable-row-selected-background}]*/
|
||||||
@@ -95,7 +95,7 @@ table.can-select.dataTable.storage:not(:focus) tbody tr:hover.selected {
|
|||||||
table.storage thead th,
|
table.storage thead th,
|
||||||
table.storage tfoot th {
|
table.storage tfoot th {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: #DDDDDD;
|
color: #dddddd;
|
||||||
/*[{datatable-header-text}]*/
|
/*[{datatable-header-text}]*/
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
@@ -103,7 +103,7 @@ table.storage tfoot th {
|
|||||||
table.storage thead th,
|
table.storage thead th,
|
||||||
table.storage thead td {
|
table.storage thead td {
|
||||||
padding: 0.5em 1em;
|
padding: 0.5em 1em;
|
||||||
border: 1px solid #DDDDDD;
|
border: 1px solid #dddddd;
|
||||||
/*[1px solid {datatable-header-border}]*/
|
/*[1px solid {datatable-header-border}]*/
|
||||||
background-color: @BaseLight;
|
background-color: @BaseLight;
|
||||||
/*[{datatable-header-background}]*/
|
/*[{datatable-header-background}]*/
|
||||||
@@ -115,10 +115,10 @@ table.storage thead td {
|
|||||||
|
|
||||||
table.dataTable thead th:active,
|
table.dataTable thead th:active,
|
||||||
table.dataTable thead td:active {
|
table.dataTable thead td:active {
|
||||||
border: 1px solid #DDDDDD;
|
border: 1px solid #dddddd;
|
||||||
/*[1px solid {datatable-header-cell-active-border}]*/
|
/*[1px solid {datatable-header-cell-active-border}]*/
|
||||||
outline: none;
|
outline: none;
|
||||||
background-color: #B4C7DC !important;
|
background-color: #b4c7dc !important;
|
||||||
/*[{datatable-header-cell-active-background} !important] */
|
/*[{datatable-header-cell-active-background} !important] */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,15 +126,15 @@ table.dataTable thead th:focus,
|
|||||||
table.dataTable thead td:focus {
|
table.dataTable thead td:focus {
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-color: #007ACC;
|
border-color: #007acc;
|
||||||
/*[{datatable-header-cell-focus-background}]*/
|
/*[{datatable-header-cell-focus-background}]*/
|
||||||
}
|
}
|
||||||
|
|
||||||
table.dataTable thead th:hover,
|
table.dataTable thead th:hover,
|
||||||
table.dataTable thead td:hover {
|
table.dataTable thead td:hover {
|
||||||
border: 1px solid #007ACC;
|
border: 1px solid #007acc;
|
||||||
/*[1px solid {datatable-header-cell-hover-border}]*/
|
/*[1px solid {datatable-header-cell-hover-border}]*/
|
||||||
background-color: #C9DEF5;
|
background-color: #c9def5;
|
||||||
/*[{datatable-header-cell-hover-background}]*/
|
/*[{datatable-header-cell-hover-background}]*/
|
||||||
color: #000000;
|
color: #000000;
|
||||||
/*[{datatable-header-cell-hover-text}]*/
|
/*[{datatable-header-cell-hover-text}]*/
|
||||||
@@ -153,7 +153,7 @@ table.storage thead td:last-child:not(:focus):not(:hover) {
|
|||||||
table.dataTable tfoot th,
|
table.dataTable tfoot th,
|
||||||
table.dataTable tfoot td {
|
table.dataTable tfoot td {
|
||||||
padding: 5px 18px 5px 18px;
|
padding: 5px 18px 5px 18px;
|
||||||
border-top: 1px solid #DDDDDD;
|
border-top: 1px solid #dddddd;
|
||||||
/*[1px solid {datatable-header-border}]*/
|
/*[1px solid {datatable-header-border}]*/
|
||||||
background-color: @BaseLight;
|
background-color: @BaseLight;
|
||||||
/*[{datatable-header-background}]*/
|
/*[{datatable-header-background}]*/
|
||||||
@@ -176,11 +176,11 @@ table.dataTable thead .sorting_desc_disabled {
|
|||||||
}
|
}
|
||||||
|
|
||||||
table.dataTable thead .sorting_asc {
|
table.dataTable thead .sorting_asc {
|
||||||
background-image: url("../../images/QueryBuilder/CollapseChevronUp_16x.png");
|
background-image: url(/images/QueryBuilder/CollapseChevronUp_16x.png);
|
||||||
}
|
}
|
||||||
|
|
||||||
table.dataTable thead .sorting_desc {
|
table.dataTable thead .sorting_desc {
|
||||||
background-image: url("../../images/QueryBuilder/CollapseChevronDown_16x.png");
|
background-image: url(/images/QueryBuilder/CollapseChevronDown_16x.png);
|
||||||
}
|
}
|
||||||
|
|
||||||
table.dataTable tbody tr {
|
table.dataTable tbody tr {
|
||||||
@@ -207,7 +207,6 @@ table.dataTable tbody tr td:first-child img {
|
|||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
table.dataTable tbody tr td:first-child {
|
table.dataTable tbody tr td:first-child {
|
||||||
border-left-width: 1px;
|
border-left-width: 1px;
|
||||||
}
|
}
|
||||||
@@ -225,12 +224,12 @@ table.show-gridlines tbody th,
|
|||||||
table.show-gridlines tbody td {
|
table.show-gridlines tbody td {
|
||||||
border-width: 1px 1px 1px 0px;
|
border-width: 1px 1px 1px 0px;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-color: #DDDDDD;
|
border-color: #dddddd;
|
||||||
/*[{datatable-base-border}]*/
|
/*[{datatable-base-border}]*/
|
||||||
}
|
}
|
||||||
|
|
||||||
table.show-gridlines tbody td:empty {
|
table.show-gridlines tbody td:empty {
|
||||||
background-color: #E3E2E6;
|
background-color: #e3e2e6;
|
||||||
/*[{datatable-base-border}]*/
|
/*[{datatable-base-border}]*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,7 +276,7 @@ table.dataTable.hover tbody tr:hover,
|
|||||||
table.dataTable.storage tbody tr:hover {
|
table.dataTable.storage tbody tr:hover {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
/*[{datatable-row-hover-text}]*/
|
/*[{datatable-row-hover-text}]*/
|
||||||
background-color: #FCFCFC;
|
background-color: #fcfcfc;
|
||||||
/*[{datatable-row-hover-background}]*/
|
/*[{datatable-row-hover-background}]*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -416,7 +415,6 @@ table.dataTable td {
|
|||||||
margin: 0px;
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Control feature layout
|
* Control feature layout
|
||||||
*/
|
*/
|
||||||
@@ -446,7 +444,7 @@ table.dataTable td {
|
|||||||
.dataTables_wrapper .dataTables_filter input {
|
.dataTables_wrapper .dataTables_filter input {
|
||||||
background-color: #333337;
|
background-color: #333337;
|
||||||
/*[{plugin-textbox-background-color}]*/
|
/*[{plugin-textbox-background-color}]*/
|
||||||
border: 1px solid #3F3F46;
|
border: 1px solid #3f3f46;
|
||||||
/*[1px solid {plugin-textbox-border-color}]*/
|
/*[1px solid {plugin-textbox-border-color}]*/
|
||||||
margin-left: 0.5em;
|
margin-left: 0.5em;
|
||||||
outline: none;
|
outline: none;
|
||||||
@@ -455,7 +453,7 @@ table.dataTable td {
|
|||||||
.dataTables_wrapper .dataTables_filter input:active,
|
.dataTables_wrapper .dataTables_filter input:active,
|
||||||
.dataTables_wrapper .dataTables_filter input:focus,
|
.dataTables_wrapper .dataTables_filter input:focus,
|
||||||
.dataTables_wrapper .dataTables_filter input:hover {
|
.dataTables_wrapper .dataTables_filter input:hover {
|
||||||
border: 1px solid #007ACC;
|
border: 1px solid #007acc;
|
||||||
/*[1px solid {search-control-mouse-over-border}]*/
|
/*[1px solid {search-control-mouse-over-border}]*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -466,7 +464,7 @@ table.dataTable td {
|
|||||||
.dataTables_wrapper .dataTables_length select:active,
|
.dataTables_wrapper .dataTables_length select:active,
|
||||||
.dataTables_wrapper .dataTables_length select:focus,
|
.dataTables_wrapper .dataTables_length select:focus,
|
||||||
.dataTables_wrapper .dataTables_length select:hover {
|
.dataTables_wrapper .dataTables_length select:hover {
|
||||||
outline: 1px solid #007ACC;
|
outline: 1px solid #007acc;
|
||||||
/*[1px solid {search-control-mouse-over-border}]*/
|
/*[1px solid {search-control-mouse-over-border}]*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -549,7 +547,6 @@ table.dataTable td {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
.flex-display();
|
.flex-display();
|
||||||
.flex-direction();
|
.flex-direction();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
|
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
|
||||||
@@ -609,7 +606,6 @@ tr:hover td.nameColumnText {
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*@media screen and (max-width: 767px) {
|
/*@media screen and (max-width: 767px) {
|
||||||
.dataTables_wrapper .dataTables_info,
|
.dataTables_wrapper .dataTables_info,
|
||||||
.dataTables_wrapper .dataTables_paginate {
|
.dataTables_wrapper .dataTables_paginate {
|
||||||
@@ -633,21 +629,21 @@ tr:hover td.nameColumnText {
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
.context-menu-item.icon-reset-column-order {
|
.context-menu-item.icon-reset-column-order {
|
||||||
background-image: url(../../images/Reset-column-options.svg);
|
background-image: url(/images/Reset-column-options.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.context-menu-item.icon-shift-non-empty-columns-left {
|
.context-menu-item.icon-shift-non-empty-columns-left {
|
||||||
background-image: url(../../images/Reorder.svg);
|
background-image: url(/images/Reorder.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.context-menu-item.icon-edit-entity {
|
.context-menu-item.icon-edit-entity {
|
||||||
background-image: url(../../images/Edit_entity.svg);
|
background-image: url(/images/Edit_entity.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.context-menu-item.icon-delete-entity {
|
.context-menu-item.icon-delete-entity {
|
||||||
background-image: url(../../images/delete.svg);
|
background-image: url(/images/delete.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.context-menu-item.icon-customize-columns {
|
.context-menu-item.icon-customize-columns {
|
||||||
background-image: url(../../images/Options.svg);
|
background-image: url(/images/Options.svg);
|
||||||
}
|
}
|
||||||
@@ -1313,7 +1313,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.plusimg-but {
|
.plusimg-but {
|
||||||
background-image: url(../images/plus_normal.svg);
|
background-image: url(/images/plus_normal.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -1321,7 +1321,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.plusimg-but:hover {
|
.plusimg-but:hover {
|
||||||
background-image: url(../images/plus_hover.svg);
|
background-image: url(/images/plus_hover.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -1329,7 +1329,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.plusimg-but:active {
|
.plusimg-but:active {
|
||||||
background-image: url(../images/plus_pressed.svg);
|
background-image: url(/images/plus_pressed.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -1337,7 +1337,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.plusimg-but:disabled {
|
.plusimg-but:disabled {
|
||||||
background-image: url(../images/plus_disabled.svg);
|
background-image: url(/images/plus_disabled.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -1345,7 +1345,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.minusimg-but {
|
.minusimg-but {
|
||||||
background-image: url(../images/minus_normal.svg);
|
background-image: url(/images/minus_normal.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -1353,7 +1353,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.minusimg-but:hover {
|
.minusimg-but:hover {
|
||||||
background-image: url(../images/minus_hover.svg);
|
background-image: url(/images/minus_hover.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -1361,7 +1361,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.minusimg-but:active {
|
.minusimg-but:active {
|
||||||
background-image: url(../images/minus_pressed.svg);
|
background-image: url(/images/minus_pressed.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -1369,7 +1369,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.minusimg-but:disabled {
|
.minusimg-but:disabled {
|
||||||
background-image: url(../images/minus_disabled.svg);
|
background-image: url(/images/minus_disabled.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -2707,7 +2707,7 @@ a:link {
|
|||||||
.errorIcon {
|
.errorIcon {
|
||||||
width: @ErrorIconWidth;
|
width: @ErrorIconWidth;
|
||||||
height: @LoadingErrorIconSize;
|
height: @LoadingErrorIconSize;
|
||||||
background-image: url(../images/error_no_outline.svg);
|
background-image: url(/images/error_no_outline.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-size: 3px;
|
background-size: 3px;
|
||||||
|
|||||||
@@ -90,7 +90,6 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.accountSwitchComponentContainer {
|
.accountSwitchComponentContainer {
|
||||||
|
|
||||||
.accountNameHeader {
|
.accountNameHeader {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: @BaseLight;
|
color: @BaseLight;
|
||||||
@@ -240,13 +239,13 @@ body {
|
|||||||
margin: @SmallSpace (2 * @MediumSpace) 0px 0px;
|
margin: @SmallSpace (2 * @MediumSpace) 0px 0px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: @SmallSpace @LargeSpace @LargeSpace @SmallSpace;
|
padding: @SmallSpace @LargeSpace @LargeSpace @SmallSpace;
|
||||||
background-image: url(../images/cancel.svg);
|
background-image: url(/images/cancel.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
width: 16px;
|
width: 16px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-image: url(../images/cancel-hover.svg);
|
background-image: url(/images/cancel-hover.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -289,7 +288,7 @@ body {
|
|||||||
|
|
||||||
.directoryDivider {
|
.directoryDivider {
|
||||||
border-bottom: 1px solid @DividerColor;
|
border-bottom: 1px solid @DividerColor;
|
||||||
margin-bottom: @LargeSpace
|
margin-bottom: @LargeSpace;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,10 +306,10 @@ body {
|
|||||||
|
|
||||||
.main {
|
.main {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
transition: all .0s ease-in-out;
|
transition: all 0s ease-in-out;
|
||||||
-ms-transition: all 0s ease-in-out;
|
-ms-transition: all 0s ease-in-out;
|
||||||
-webkit-transition: all 0s ease-in-out;
|
-webkit-transition: all 0s ease-in-out;
|
||||||
-moz-transition: all .0s ease-in-out;
|
-moz-transition: all 0s ease-in-out;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
background-color: @BaseLight;
|
background-color: @BaseLight;
|
||||||
}
|
}
|
||||||
@@ -321,9 +320,9 @@ body {
|
|||||||
.mini {
|
.mini {
|
||||||
width: 0%;
|
width: 0%;
|
||||||
float: left;
|
float: left;
|
||||||
transition: all .4s ease-in-out;
|
transition: all 0.4s ease-in-out;
|
||||||
-webkit-transition: all .4s ease-in-out;
|
-webkit-transition: all 0.4s ease-in-out;
|
||||||
-moz-transition: all .4s ease-in-out;
|
-moz-transition: all 0.4s ease-in-out;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
border-right: solid 1px lightgray;
|
border-right: solid 1px lightgray;
|
||||||
@@ -543,11 +542,11 @@ body {
|
|||||||
|
|
||||||
.datalist-arrow:focus:after,
|
.datalist-arrow:focus:after,
|
||||||
.datalist-arrow:active:after {
|
.datalist-arrow:active:after {
|
||||||
background: #1EBBEE;
|
background: #1ebbee;
|
||||||
}
|
}
|
||||||
|
|
||||||
input::-webkit-calendar-picker-indicator::after {
|
input::-webkit-calendar-picker-indicator::after {
|
||||||
content: '\276F';
|
content: "\276F";
|
||||||
right: 0;
|
right: 0;
|
||||||
top: -8%;
|
top: -8%;
|
||||||
display: block;
|
display: block;
|
||||||
@@ -561,7 +560,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.datalist-arrow:after:hover {
|
.datalist-arrow:after:hover {
|
||||||
content: '\276F';
|
content: "\276F";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 1px;
|
right: 1px;
|
||||||
top: 6%;
|
top: 6%;
|
||||||
@@ -573,7 +572,7 @@ body {
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
background-color: #1EBBEE;
|
background-color: #1ebbee;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Introline3 {
|
.Introline3 {
|
||||||
@@ -676,7 +675,7 @@ body {
|
|||||||
.atags {
|
.atags {
|
||||||
color: @AccentMediumHigh;
|
color: @AccentMediumHigh;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
cursor: pointer
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
|
|||||||
@@ -130,19 +130,19 @@ menuQuickStart {
|
|||||||
.content {
|
.content {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
transition: all .4s ease-in-out;
|
transition: all 0.4s ease-in-out;
|
||||||
-ms-transition: all .4s ease-in-out;
|
-ms-transition: all 0.4s ease-in-out;
|
||||||
-webkit-transition: all .4s ease-in-out;
|
-webkit-transition: all 0.4s ease-in-out;
|
||||||
-moz-transition: all .4s ease-in-out;
|
-moz-transition: all 0.4s ease-in-out;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mini {
|
.mini {
|
||||||
width: 0%;
|
width: 0%;
|
||||||
float: left;
|
float: left;
|
||||||
transition: all .4s ease-in-out;
|
transition: all 0.4s ease-in-out;
|
||||||
-webkit-transition: all .4s ease-in-out;
|
-webkit-transition: all 0.4s ease-in-out;
|
||||||
-moz-transition: all .4s ease-in-out;
|
-moz-transition: all 0.4s ease-in-out;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
}
|
}
|
||||||
@@ -235,29 +235,29 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.gridRowSelected {
|
.gridRowSelected {
|
||||||
background-color: #DEF;
|
background-color: #def;
|
||||||
}
|
}
|
||||||
|
|
||||||
.gridRowSelected:hover {
|
.gridRowSelected:hover {
|
||||||
background-color: #DEF!important;
|
background-color: #def !important;
|
||||||
cursor: initial;
|
cursor: initial;
|
||||||
}
|
}
|
||||||
|
|
||||||
.collectionNodeSelected {
|
.collectionNodeSelected {
|
||||||
background-color: #DEF;
|
background-color: #def;
|
||||||
}
|
}
|
||||||
|
|
||||||
.collectionNodeSelected:hover {
|
.collectionNodeSelected:hover {
|
||||||
background-color: #DEF!important;
|
background-color: #def !important;
|
||||||
cursor: default !important;
|
cursor: default !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.databaseNodeSelected {
|
.databaseNodeSelected {
|
||||||
background-color: #DEF;
|
background-color: #def;
|
||||||
}
|
}
|
||||||
|
|
||||||
.databaseNodeSelected:hover {
|
.databaseNodeSelected:hover {
|
||||||
background-color: #DEF!important;
|
background-color: #def !important;
|
||||||
cursor: default !important;
|
cursor: default !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,7 +266,7 @@ menuQuickStart {
|
|||||||
border-top: 1px solid #eee;
|
border-top: 1px solid #eee;
|
||||||
margin-left: -17px;
|
margin-left: -17px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
color: 1px solid #53575B;
|
color: 1px solid #53575b;
|
||||||
}
|
}
|
||||||
|
|
||||||
.partitioning-btn {
|
.partitioning-btn {
|
||||||
@@ -328,11 +328,11 @@ menuQuickStart {
|
|||||||
|
|
||||||
.collid-white {
|
.collid-white {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border: solid 1px #DDD;
|
border: solid 1px #ddd;
|
||||||
}
|
}
|
||||||
|
|
||||||
.plusimg-but {
|
.plusimg-but {
|
||||||
background-image: url(../images/plus_normal.svg);
|
background-image: url(/images/plus_normal.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -340,7 +340,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.plusimg-but:hover {
|
.plusimg-but:hover {
|
||||||
background-image: url(../images/plus_hover.svg);
|
background-image: url(/images/plus_hover.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -348,7 +348,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.plusimg-but:active {
|
.plusimg-but:active {
|
||||||
background-image: url(../images/plus_pressed.svg);
|
background-image: url(/images/plus_pressed.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -356,7 +356,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.plusimg-but:disabled {
|
.plusimg-but:disabled {
|
||||||
background-image: url(../images/plus_disabled.svg);
|
background-image: url(/images/plus_disabled.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -364,7 +364,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.minusimg-but {
|
.minusimg-but {
|
||||||
background-image: url(../images/minus_normal.svg);
|
background-image: url(/images/minus_normal.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -372,7 +372,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.minusimg-but:hover {
|
.minusimg-but:hover {
|
||||||
background-image: url(../images/minus_hover.svg);
|
background-image: url(/images/minus_hover.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -380,7 +380,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.minusimg-but:active {
|
.minusimg-but:active {
|
||||||
background-image: url(../images/minus_pressed.svg);
|
background-image: url(/images/minus_pressed.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -388,7 +388,7 @@ menuQuickStart {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.minusimg-but:disabled {
|
.minusimg-but:disabled {
|
||||||
background-image: url(../images/minus_disabled.svg);
|
background-image: url(/images/minus_disabled.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
position: static;
|
position: static;
|
||||||
@@ -515,11 +515,11 @@ label {
|
|||||||
|
|
||||||
.datalist-arrow:focus:after,
|
.datalist-arrow:focus:after,
|
||||||
.datalist-arrow:active:after {
|
.datalist-arrow:active:after {
|
||||||
background: #1EBBEE;
|
background: #1ebbee;
|
||||||
}
|
}
|
||||||
|
|
||||||
input::-webkit-calendar-picker-indicator::after {
|
input::-webkit-calendar-picker-indicator::after {
|
||||||
content: '\276F';
|
content: "\276F";
|
||||||
right: 0;
|
right: 0;
|
||||||
top: -8%;
|
top: -8%;
|
||||||
display: block;
|
display: block;
|
||||||
@@ -533,7 +533,7 @@ input::-webkit-calendar-picker-indicator::after {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.datalist-arrow:after:hover {
|
.datalist-arrow:after:hover {
|
||||||
content: '\276F';
|
content: "\276F";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 1px;
|
right: 1px;
|
||||||
top: 6%;
|
top: 6%;
|
||||||
@@ -545,7 +545,7 @@ input::-webkit-calendar-picker-indicator::after {
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
background-color: #1EBBEE;
|
background-color: #1ebbee;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Introline3 {
|
.Introline3 {
|
||||||
@@ -567,7 +567,7 @@ input::-webkit-calendar-picker-indicator::after {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.collectionCollapsed:hover {
|
.collectionCollapsed:hover {
|
||||||
background: #EEEEEE;
|
background: #eeeeee;
|
||||||
}
|
}
|
||||||
|
|
||||||
.collectionCollapsed:active {
|
.collectionCollapsed:active {
|
||||||
@@ -590,12 +590,12 @@ input::-webkit-calendar-picker-indicator::after {
|
|||||||
|
|
||||||
.leftarrowCollapsed {
|
.leftarrowCollapsed {
|
||||||
padding: 2px 4px 4px 5px;
|
padding: 2px 4px 4px 5px;
|
||||||
border: solid 1px #FFF;
|
border: solid 1px #fff;
|
||||||
margin: 6px 4px 0px -11px;
|
margin: 6px 4px 0px -11px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.leftarrowCollapsed:hover {
|
.leftarrowCollapsed:hover {
|
||||||
background-color: #EEEEEE;
|
background-color: #eeeeee;
|
||||||
}
|
}
|
||||||
|
|
||||||
.leftarrowCollapsed:active {
|
.leftarrowCollapsed:active {
|
||||||
@@ -691,7 +691,7 @@ input::-webkit-calendar-picker-indicator::after {
|
|||||||
.atags {
|
.atags {
|
||||||
color: @AccentMediumHigh;
|
color: @AccentMediumHigh;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
cursor: pointer
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.qsmenuicons {
|
.qsmenuicons {
|
||||||
@@ -754,13 +754,13 @@ a:link {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.command:hover {
|
.command:hover {
|
||||||
background-color: #E6E6E6;
|
background-color: #e6e6e6;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding-bottom: 12px;
|
padding-bottom: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.command:active {
|
.command:active {
|
||||||
background-color: #CCCCCC;
|
background-color: #cccccc;
|
||||||
border: solid 1px @AccentMediumHigh;
|
border: solid 1px @AccentMediumHigh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -966,7 +966,7 @@ a:link {
|
|||||||
color: #393939;
|
color: #393939;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab [type=radio] {
|
.tab [type="radio"] {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -979,40 +979,40 @@ a:link {
|
|||||||
padding: 15px 0px 20px 0;
|
padding: 15px 0px 20px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab [type=radio]:checked~label {
|
.tab [type="radio"]:checked ~ label {
|
||||||
border: 1px solid #0072c6;
|
border: 1px solid #0072c6;
|
||||||
background-color: @AccentMediumHigh;
|
background-color: @AccentMediumHigh;
|
||||||
color: white;
|
color: white;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab [type=radio]:checked~label:hover {
|
.tab [type="radio"]:checked ~ label:hover {
|
||||||
border: 1px solid @AccentMediumHigh;
|
border: 1px solid @AccentMediumHigh;
|
||||||
background-color: @AccentMediumHigh;
|
background-color: @AccentMediumHigh;
|
||||||
color: white;
|
color: white;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab [type=radio]:checked~label:active {
|
.tab [type="radio"]:checked ~ label:active {
|
||||||
border: 1px solid #0072c6;
|
border: 1px solid #0072c6;
|
||||||
background-color: #0072c6;
|
background-color: #0072c6;
|
||||||
color: white;
|
color: white;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab [type=radio]:checked~label~.tabcontent {
|
.tab [type="radio"]:checked ~ label ~ .tabcontent {
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
display: initial;
|
display: initial;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab [type=radio]:not(:checked)~label:hover {
|
.tab [type="radio"]:not(:checked) ~ label:hover {
|
||||||
border: 1px solid #969696;
|
border: 1px solid #969696;
|
||||||
background-color: #969696;
|
background-color: #969696;
|
||||||
color: white;
|
color: white;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab [type=radio]:not(:checked)~label~.tabcontent {
|
.tab [type="radio"]:not(:checked) ~ label ~ .tabcontent {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1193,7 +1193,7 @@ a:link {
|
|||||||
.nav-tabs > li.active > a,
|
.nav-tabs > li.active > a,
|
||||||
.nav-tabs > li.active > a:focus,
|
.nav-tabs > li.active > a:focus,
|
||||||
.nav-tabs > li.active > a:hover {
|
.nav-tabs > li.active > a:hover {
|
||||||
border-bottom-color: #FFF;
|
border-bottom-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tabList {
|
.tabList {
|
||||||
@@ -1249,20 +1249,20 @@ a:link {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.close-Icon {
|
.close-Icon {
|
||||||
background-image: url(../images/close-black.svg);
|
background-image: url(/images/close-black.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 0px 0px 0px 11px;
|
padding: 0px 0px 0px 11px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.close-Icon:hover {
|
.close-Icon:hover {
|
||||||
background-image: url(../images/close-black-hover.svg);
|
background-image: url(/images/close-black-hover.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
padding: 0px 0px 0px 11px;
|
padding: 0px 0px 0px 11px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clickableLink {
|
.clickableLink {
|
||||||
color: @AccentMediumHigh;
|
color: @AccentMediumHigh;
|
||||||
font-family: 'Segoe UI';
|
font-family: "Segoe UI";
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|||||||
10412
package-lock.json
generated
10412
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
149
package.json
149
package.json
@@ -9,10 +9,10 @@
|
|||||||
"@azure/cosmos-language-service": "0.0.5",
|
"@azure/cosmos-language-service": "0.0.5",
|
||||||
"@azure/identity": "1.2.1",
|
"@azure/identity": "1.2.1",
|
||||||
"@azure/ms-rest-nodeauth": "3.0.7",
|
"@azure/ms-rest-nodeauth": "3.0.7",
|
||||||
|
"@babel/plugin-proposal-class-properties": "7.13.0",
|
||||||
|
"@babel/plugin-proposal-decorators": "7.14.2",
|
||||||
|
"@fluentui/react": "8.14.8",
|
||||||
"@azure/msal-browser": "2.14.2",
|
"@azure/msal-browser": "2.14.2",
|
||||||
"@babel/plugin-proposal-class-properties": "7.12.1",
|
|
||||||
"@babel/plugin-proposal-decorators": "7.12.12",
|
|
||||||
"@fluentui/react": "8.14.3",
|
|
||||||
"@jupyterlab/services": "6.0.2",
|
"@jupyterlab/services": "6.0.2",
|
||||||
"@jupyterlab/terminal": "3.0.3",
|
"@jupyterlab/terminal": "3.0.3",
|
||||||
"@microsoft/applicationinsights-web": "2.6.1",
|
"@microsoft/applicationinsights-web": "2.6.1",
|
||||||
@@ -41,17 +41,13 @@
|
|||||||
"@nteract/transform-vega": "7.0.6",
|
"@nteract/transform-vega": "7.0.6",
|
||||||
"@octokit/rest": "17.9.2",
|
"@octokit/rest": "17.9.2",
|
||||||
"@phosphor/widgets": "1.9.3",
|
"@phosphor/widgets": "1.9.3",
|
||||||
"@testing-library/jest-dom": "5.11.9",
|
|
||||||
"@types/mkdirp": "1.0.1",
|
|
||||||
"@types/node-fetch": "2.5.7",
|
|
||||||
"applicationinsights": "1.8.0",
|
"applicationinsights": "1.8.0",
|
||||||
"bootstrap": "3.4.1",
|
"bootstrap": "3.4.1",
|
||||||
"canvas": "file:./canvas",
|
"canvas": "file:./canvas",
|
||||||
"clean-webpack-plugin": "0.1.19",
|
|
||||||
"clipboard-copy": "4.0.1",
|
"clipboard-copy": "4.0.1",
|
||||||
"copy-webpack-plugin": "6.0.2",
|
|
||||||
"crossroads": "0.12.2",
|
"crossroads": "0.12.2",
|
||||||
"css-element-queries": "1.1.1",
|
"crypto-browserify": "3.12.0",
|
||||||
|
"css-element-queries": "1.2.3",
|
||||||
"d3": "6.1.1",
|
"d3": "6.1.1",
|
||||||
"datatables.net-colreorder-dt": "1.5.1",
|
"datatables.net-colreorder-dt": "1.5.1",
|
||||||
"datatables.net-dt": "1.10.19",
|
"datatables.net-dt": "1.10.19",
|
||||||
@@ -59,18 +55,18 @@
|
|||||||
"dayjs": "1.8.19",
|
"dayjs": "1.8.19",
|
||||||
"dom-to-image": "2.6.0",
|
"dom-to-image": "2.6.0",
|
||||||
"dotenv": "8.2.0",
|
"dotenv": "8.2.0",
|
||||||
"eslint-plugin-jest": "23.13.2",
|
"eslint-plugin-jest": "24.3.6",
|
||||||
"eslint-plugin-react": "7.20.0",
|
"eslint-plugin-react": "7.23.2",
|
||||||
"hasher": "1.2.0",
|
"hasher": "1.2.0",
|
||||||
"html2canvas": "1.0.0-rc.5",
|
"html2canvas": "1.0.0-rc.7",
|
||||||
"i18next": "19.8.4",
|
"i18next": "20.2.2",
|
||||||
"i18next-browser-languagedetector": "6.0.1",
|
"i18next-browser-languagedetector": "6.1.0",
|
||||||
"i18next-http-backend": "1.0.23",
|
"i18next-http-backend": "1.2.2",
|
||||||
"iframe-resizer-react": "1.1.0",
|
"iframe-resizer-react": "1.1.0",
|
||||||
"immutable": "4.0.0-rc.12",
|
"immutable": "4.0.0-rc.12",
|
||||||
"is-ci": "2.0.0",
|
"is-ci": "2.0.0",
|
||||||
"jquery": "3.5.1",
|
"jquery": "3.6.0",
|
||||||
"jquery-typeahead": "2.10.6",
|
"jquery-typeahead": "2.11.1",
|
||||||
"jquery-ui-dist": "1.12.1",
|
"jquery-ui-dist": "1.12.1",
|
||||||
"knockout": "3.5.1",
|
"knockout": "3.5.1",
|
||||||
"mkdirp": "1.0.4",
|
"mkdirp": "1.0.4",
|
||||||
@@ -80,108 +76,117 @@
|
|||||||
"plotly.js-cartesian-dist-min": "1.52.3",
|
"plotly.js-cartesian-dist-min": "1.52.3",
|
||||||
"post-robot": "10.0.42",
|
"post-robot": "10.0.42",
|
||||||
"q": "1.5.1",
|
"q": "1.5.1",
|
||||||
"react": "16.13.1",
|
"react": "17.0.2",
|
||||||
"react-animate-height": "2.0.8",
|
"react-animate-height": "2.0.8",
|
||||||
"react-dnd": "9.4.0",
|
"react-dnd": "14.0.2",
|
||||||
"react-dnd-html5-backend": "9.4.0",
|
"react-dnd-html5-backend": "14.0.0",
|
||||||
"react-dom": "16.13.1",
|
"react-dom": "17.0.2",
|
||||||
"react-hotkeys": "2.0.0",
|
"react-hotkeys": "2.0.0",
|
||||||
"react-i18next": "11.8.5",
|
"react-i18next": "11.8.15",
|
||||||
"react-notification-system": "0.2.17",
|
"react-notification-system": "0.2.17",
|
||||||
"react-redux": "7.1.3",
|
"react-redux": "7.2.4",
|
||||||
"redux": "4.0.4",
|
"redux": "4.1.0",
|
||||||
"reflect-metadata": "0.1.13",
|
"reflect-metadata": "0.1.13",
|
||||||
"rx-jupyter": "5.5.12",
|
"rx-jupyter": "5.5.12",
|
||||||
"rxjs": "6.6.3",
|
"rxjs": "6.6.3",
|
||||||
"sanitize-html": "2.3.3",
|
"sanitize-html": "2.3.3",
|
||||||
"styled-components": "4.3.2",
|
"styled-components": "5.3.0",
|
||||||
"swr": "0.4.0",
|
"swr": "0.4.0",
|
||||||
"terser-webpack-plugin": "3.1.0",
|
"underscore": "1.13.1",
|
||||||
"underscore": "1.9.1",
|
|
||||||
"utility-types": "3.10.0",
|
"utility-types": "3.10.0",
|
||||||
"zustand": "3.5.0"
|
"zustand": "3.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "7.9.0",
|
"@babel/core": "7.14.2",
|
||||||
"@babel/preset-env": "7.9.0",
|
"@babel/preset-env": "7.14.2",
|
||||||
"@babel/preset-react": "7.9.4",
|
"@babel/preset-react": "7.13.13",
|
||||||
"@babel/preset-typescript": "7.9.0",
|
"@babel/preset-typescript": "7.13.0",
|
||||||
"@testing-library/react": "11.2.3",
|
"@svgr/webpack": "5.5.0",
|
||||||
|
"@testing-library/jest-dom": "5.12.0",
|
||||||
|
"@testing-library/react": "11.2.7",
|
||||||
"@types/applicationinsights-js": "1.0.7",
|
"@types/applicationinsights-js": "1.0.7",
|
||||||
"@types/codemirror": "0.0.56",
|
"@types/codemirror": "0.0.56",
|
||||||
"@types/crossroads": "0.0.30",
|
"@types/crossroads": "0.0.30",
|
||||||
"@types/d3": "5.9.2",
|
"@types/d3": "5.9.2",
|
||||||
"@types/dom-to-image": "2.6.2",
|
"@types/dom-to-image": "2.6.2",
|
||||||
"@types/enzyme": "3.10.7",
|
"@types/enzyme": "3.10.8",
|
||||||
"@types/enzyme-adapter-react-16": "1.0.6",
|
|
||||||
"@types/hasher": "0.0.31",
|
"@types/hasher": "0.0.31",
|
||||||
"@types/jest": "26.0.20",
|
"@types/memoize-one": "4.1.1",
|
||||||
"@types/node": "12.11.1",
|
"@types/mkdirp": "1.0.1",
|
||||||
|
"@types/node": "15.3.0",
|
||||||
|
"@types/node-fetch": "2.5.10",
|
||||||
"@types/post-robot": "10.0.1",
|
"@types/post-robot": "10.0.1",
|
||||||
|
"@types/promise.prototype.finally": "2.0.4",
|
||||||
|
"@types/jest": "26.0.20",
|
||||||
"@types/q": "1.5.1",
|
"@types/q": "1.5.1",
|
||||||
"@types/react": "17.0.3",
|
"@types/react": "17.0.5",
|
||||||
"@types/react-dom": "17.0.3",
|
"@types/react-dom": "17.0.5",
|
||||||
"@types/react-notification-system": "0.2.39",
|
"@types/react-notification-system": "0.2.39",
|
||||||
"@types/react-redux": "7.1.7",
|
"@types/react-redux": "7.1.16",
|
||||||
"@types/sanitize-html": "1.27.2",
|
"@types/sanitize-html": "2.3.1",
|
||||||
"@types/sinon": "2.3.3",
|
"@types/sinon": "2.3.3",
|
||||||
"@types/styled-components": "5.1.1",
|
"@types/styled-components": "5.1.9",
|
||||||
"@types/underscore": "1.7.36",
|
"@types/underscore": "1.11.2",
|
||||||
"@typescript-eslint/eslint-plugin": "4.22.0",
|
"@typescript-eslint/eslint-plugin": "4.23.0",
|
||||||
"@typescript-eslint/parser": "4.22.0",
|
"@typescript-eslint/parser": "4.23.0",
|
||||||
"babel-jest": "24.9.0",
|
"@wojtekmaj/enzyme-adapter-react-17": "0.6.1",
|
||||||
"babel-loader": "8.1.0",
|
"babel-jest": "26.6.3",
|
||||||
|
"babel-loader": "8.2.2",
|
||||||
"buffer": "5.1.0",
|
"buffer": "5.1.0",
|
||||||
"case-sensitive-paths-webpack-plugin": "2.3.0",
|
"case-sensitive-paths-webpack-plugin": "2.4.0",
|
||||||
|
"clean-webpack-plugin": "4.0.0-alpha.0",
|
||||||
|
"copy-webpack-plugin": "8.1.1",
|
||||||
"create-file-webpack": "1.0.2",
|
"create-file-webpack": "1.0.2",
|
||||||
"css-loader": "1.0.0",
|
"css-loader": "1.0.0",
|
||||||
"enzyme": "3.11.0",
|
"enzyme": "3.11.0",
|
||||||
"enzyme-adapter-react-16": "1.15.5",
|
"enzyme-to-json": "3.6.2",
|
||||||
"enzyme-to-json": "3.6.1",
|
"eslint": "7.26.0",
|
||||||
"eslint": "7.8.1",
|
|
||||||
"eslint-cli": "1.1.1",
|
"eslint-cli": "1.1.1",
|
||||||
"eslint-plugin-no-null": "1.0.2",
|
"eslint-plugin-no-null": "1.0.2",
|
||||||
"eslint-plugin-prefer-arrow": "1.2.2",
|
"eslint-plugin-prefer-arrow": "1.2.3",
|
||||||
"eslint-plugin-react-hooks": "4.2.0",
|
"eslint-plugin-react-hooks": "4.2.0",
|
||||||
|
"expose-loader": "2.0.0",
|
||||||
"expect-playwright": "0.3.3",
|
"expect-playwright": "0.3.3",
|
||||||
"fast-glob": "3.2.5",
|
"fast-glob": "3.2.5",
|
||||||
"file-loader": "2.0.0",
|
"file-loader": "6.2.0",
|
||||||
"fs-extra": "7.0.0",
|
"fs-extra": "7.0.0",
|
||||||
"html-inline-css-webpack-plugin": "1.11.0",
|
"html-inline-css-webpack-plugin": "1.11.0",
|
||||||
"html-loader": "0.5.5",
|
"html-loader": "2.1.2",
|
||||||
"html-loader-jest": "0.2.1",
|
"html-loader-jest": "0.2.1",
|
||||||
"html-webpack-plugin": "4.5.2",
|
"html-webpack-plugin": "5.3.1",
|
||||||
"jest": "25.5.4",
|
"jest": "26.6.3",
|
||||||
"jest-canvas-mock": "2.1.0",
|
"jest-canvas-mock": "2.1.0",
|
||||||
"jest-playwright-preset": "1.5.1",
|
"jest-playwright-preset": "1.5.2",
|
||||||
"jest-trx-results-processor": "0.0.7",
|
"jest-trx-results-processor": "2.2.0",
|
||||||
"less": "3.8.1",
|
"less": "4.1.1",
|
||||||
"less-loader": "4.1.0",
|
"less-loader": "8.1.1",
|
||||||
"less-vars-loader": "1.1.0",
|
"less-vars-loader": "1.1.0",
|
||||||
"mini-css-extract-plugin": "0.4.3",
|
"mini-css-extract-plugin": "1.6.0",
|
||||||
"monaco-editor-webpack-plugin": "1.7.0",
|
"monaco-editor-webpack-plugin": "1.7.0",
|
||||||
"node-fetch": "2.6.1",
|
"node-fetch": "2.6.1",
|
||||||
"playwright": "1.10.0",
|
"playwright": "1.10.0",
|
||||||
"prettier": "2.2.1",
|
"prettier": "2.3.0",
|
||||||
"raw-loader": "0.5.1",
|
"process": "0.11.10",
|
||||||
|
"raw-loader": "4.0.2",
|
||||||
"react-dev-utils": "11.0.4",
|
"react-dev-utils": "11.0.4",
|
||||||
"rimraf": "3.0.0",
|
"rimraf": "3.0.0",
|
||||||
"sinon": "3.2.1",
|
"sinon": "3.2.1",
|
||||||
"style-loader": "0.23.0",
|
"style-loader": "2.0.0",
|
||||||
"ts-loader": "6.2.2",
|
"terser-webpack-plugin": "5.1.2",
|
||||||
"tslint": "5.11.0",
|
"ts-loader": "9.1.2",
|
||||||
"tslint-microsoft-contrib": "6.0.0",
|
"tslint": "5.20.1",
|
||||||
|
"tslint-microsoft-contrib": "6.2.0",
|
||||||
"typedoc": "0.20.36",
|
"typedoc": "0.20.36",
|
||||||
"typescript": "4.2.4",
|
"typescript": "4.2.4",
|
||||||
"url-loader": "1.1.1",
|
"url-loader": "4.1.1",
|
||||||
"wait-on": "4.0.2",
|
"wait-on": "4.0.2",
|
||||||
"webpack": "4.46.0",
|
"webpack": "5.37.0",
|
||||||
"webpack-bundle-analyzer": "3.6.1",
|
"webpack-bundle-analyzer": "4.4.1",
|
||||||
"webpack-cli": "3.3.10",
|
"webpack-cli": "4.7.0",
|
||||||
"webpack-dev-server": "3.11.0"
|
"webpack-dev-server": "3.11.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node --max-old-space-size=10196 node_modules/webpack-dev-server/bin/webpack-dev-server.js",
|
"start": "webpack serve",
|
||||||
"dev": "echo \"WARNING: npm run dev has been deprecated\" && npm run build",
|
"dev": "echo \"WARNING: npm run dev has been deprecated\" && npm run build",
|
||||||
"build:dataExplorer:ci": "npm run build:ci",
|
"build:dataExplorer:ci": "npm run build:ci",
|
||||||
"build": "npm run format:check && npm run lint && npm run compile && npm run compile:strict && npm run pack:prod && npm run copyToConsumers",
|
"build": "npm run format:check && npm run lint && npm run compile && npm run compile:strict && npm run pack:prod && npm run copyToConsumers",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
import arrowLeftImg from "images/imgarrowlefticon.svg";
|
||||||
import React, { FunctionComponent } from "react";
|
import React, { FunctionComponent } from "react";
|
||||||
import arrowLeftImg from "../../images/imgarrowlefticon.svg";
|
|
||||||
import { userContext } from "../UserContext";
|
import { userContext } from "../UserContext";
|
||||||
|
|
||||||
export interface CollapsedResourceTreeProps {
|
export interface CollapsedResourceTreeProps {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ const collection = {
|
|||||||
},
|
},
|
||||||
} as Collection;
|
} as Collection;
|
||||||
|
|
||||||
const documentId = ({
|
const documentId = {
|
||||||
partitionKeyHeader: () => "[]",
|
partitionKeyHeader: () => "[]",
|
||||||
self: "db/testDB/db/testCollection/docs/testId",
|
self: "db/testDB/db/testCollection/docs/testId",
|
||||||
partitionKeyProperty,
|
partitionKeyProperty,
|
||||||
@@ -40,7 +40,7 @@ const documentId = ({
|
|||||||
kind: "Hash",
|
kind: "Hash",
|
||||||
version: 1,
|
version: 1,
|
||||||
},
|
},
|
||||||
} as unknown) as DocumentId;
|
} as unknown as DocumentId;
|
||||||
|
|
||||||
const databaseAccount = {
|
const databaseAccount = {
|
||||||
id: "foo",
|
id: "foo",
|
||||||
|
|||||||
@@ -314,7 +314,7 @@ export function createMongoCollectionWithProxy(
|
|||||||
return window
|
return window
|
||||||
.fetch(
|
.fetch(
|
||||||
`${endpoint}/createCollection?${queryString.stringify(
|
`${endpoint}/createCollection?${queryString.stringify(
|
||||||
(mongoParams as unknown) as queryString.ParsedUrlQueryInput
|
mongoParams as unknown as queryString.ParsedUrlQueryInput
|
||||||
)}`,
|
)}`,
|
||||||
{
|
{
|
||||||
method: "POST",
|
method: "POST",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
import arrowLeftImg from "images/imgarrowlefticon.svg";
|
||||||
|
import refreshImg from "images/refresh-cosmos.svg";
|
||||||
import React, { FunctionComponent } from "react";
|
import React, { FunctionComponent } from "react";
|
||||||
import arrowLeftImg from "../../images/imgarrowlefticon.svg";
|
|
||||||
import refreshImg from "../../images/refresh-cosmos.svg";
|
|
||||||
import { AuthType } from "../AuthType";
|
import { AuthType } from "../AuthType";
|
||||||
import { userContext } from "../UserContext";
|
import { userContext } from "../UserContext";
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import DeleteIcon from "images/delete.svg";
|
||||||
|
import EditIcon from "images/Edit_entity.svg";
|
||||||
import {
|
import {
|
||||||
Dropdown,
|
Dropdown,
|
||||||
IDropdownOption,
|
IDropdownOption,
|
||||||
@@ -10,8 +12,6 @@ import {
|
|||||||
TooltipHost,
|
TooltipHost,
|
||||||
} from "@fluentui/react";
|
} from "@fluentui/react";
|
||||||
import React, { FunctionComponent } from "react";
|
import React, { FunctionComponent } from "react";
|
||||||
import DeleteIcon from "../../images/delete.svg";
|
|
||||||
import EditIcon from "../../images/Edit_entity.svg";
|
|
||||||
import { CassandraType, TableType } from "../Explorer/Tables/Constants";
|
import { CassandraType, TableType } from "../Explorer/Tables/Constants";
|
||||||
import { userContext } from "../UserContext";
|
import { userContext } from "../UserContext";
|
||||||
import { EntityValue } from "./EntityValue";
|
import { EntityValue } from "./EntityValue";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Image, Stack, TextField } from "@fluentui/react";
|
import { Image, Stack, TextField } from "@fluentui/react";
|
||||||
|
import FolderIcon from "images/folder_16x16.svg";
|
||||||
import React, { ChangeEvent, FunctionComponent, KeyboardEvent, useRef, useState } from "react";
|
import React, { ChangeEvent, FunctionComponent, KeyboardEvent, useRef, useState } from "react";
|
||||||
import FolderIcon from "../../../images/folder_16x16.svg";
|
|
||||||
import * as Constants from "../Constants";
|
import * as Constants from "../Constants";
|
||||||
import { InfoTooltip } from "../Tooltip/InfoTooltip";
|
import { InfoTooltip } from "../Tooltip/InfoTooltip";
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ export async function createTrigger(
|
|||||||
const response = await client()
|
const response = await client()
|
||||||
.database(databaseId)
|
.database(databaseId)
|
||||||
.container(collectionId)
|
.container(collectionId)
|
||||||
.scripts.triggers.create((trigger as unknown) as TriggerDefinition); // TODO: TypeScript does not like the SQL SDK trigger type
|
.scripts.triggers.create(trigger as unknown as TriggerDefinition); // TODO: TypeScript does not like the SQL SDK trigger type
|
||||||
return response.resource;
|
return response.resource;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
handleError(error, "CreateTrigger", `Error while creating trigger ${trigger.id}`);
|
handleError(error, "CreateTrigger", `Error while creating trigger ${trigger.id}`);
|
||||||
|
|||||||
@@ -405,7 +405,7 @@ const updateOfferWithSDK = async (params: UpdateOfferParams): Promise<Offer> =>
|
|||||||
const sdkResponse = await client()
|
const sdkResponse = await client()
|
||||||
.offer(params.currentOffer.id)
|
.offer(params.currentOffer.id)
|
||||||
// TODO Remove casting when SDK types are fixed (https://github.com/Azure/azure-sdk-for-js/issues/10660)
|
// TODO Remove casting when SDK types are fixed (https://github.com/Azure/azure-sdk-for-js/issues/10660)
|
||||||
.replace((newOffer as unknown) as OfferDefinition, options);
|
.replace(newOffer as unknown as OfferDefinition, options);
|
||||||
|
|
||||||
return parseSDKOfferResponse(sdkResponse);
|
return parseSDKOfferResponse(sdkResponse);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export async function updateTrigger(
|
|||||||
.database(databaseId)
|
.database(databaseId)
|
||||||
.container(collectionId)
|
.container(collectionId)
|
||||||
.scripts.trigger(trigger.id)
|
.scripts.trigger(trigger.id)
|
||||||
.replace((trigger as unknown) as TriggerDefinition); // TODO: TypeScript does not like the SQL SDK trigger type
|
.replace(trigger as unknown as TriggerDefinition); // TODO: TypeScript does not like the SQL SDK trigger type
|
||||||
return response?.resource;
|
return response?.resource;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
handleError(error, "UpdateTrigger", `Error while updating trigger ${trigger.id}`);
|
handleError(error, "UpdateTrigger", `Error while updating trigger ${trigger.id}`);
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import AddCollectionIcon from "../../images/AddCollection.svg";
|
import AddCollectionIcon from "images/AddCollection.svg";
|
||||||
import AddSqlQueryIcon from "../../images/AddSqlQuery_16x16.svg";
|
import AddSqlQueryIcon from "images/AddSqlQuery_16x16.svg";
|
||||||
import AddStoredProcedureIcon from "../../images/AddStoredProcedure.svg";
|
import AddStoredProcedureIcon from "images/AddStoredProcedure.svg";
|
||||||
import AddTriggerIcon from "../../images/AddTrigger.svg";
|
import AddTriggerIcon from "images/AddTrigger.svg";
|
||||||
import AddUdfIcon from "../../images/AddUdf.svg";
|
import AddUdfIcon from "images/AddUdf.svg";
|
||||||
import DeleteCollectionIcon from "../../images/DeleteCollection.svg";
|
import DeleteCollectionIcon from "images/DeleteCollection.svg";
|
||||||
import DeleteDatabaseIcon from "../../images/DeleteDatabase.svg";
|
import DeleteDatabaseIcon from "images/DeleteDatabase.svg";
|
||||||
import DeleteSprocIcon from "../../images/DeleteSproc.svg";
|
import DeleteSprocIcon from "images/DeleteSproc.svg";
|
||||||
import DeleteTriggerIcon from "../../images/DeleteTrigger.svg";
|
import DeleteTriggerIcon from "images/DeleteTrigger.svg";
|
||||||
import DeleteUDFIcon from "../../images/DeleteUDF.svg";
|
import DeleteUDFIcon from "images/DeleteUDF.svg";
|
||||||
import HostedTerminalIcon from "../../images/Hosted-Terminal.svg";
|
import HostedTerminalIcon from "images/Hosted-Terminal.svg";
|
||||||
import * as ViewModels from "../Contracts/ViewModels";
|
import * as ViewModels from "../Contracts/ViewModels";
|
||||||
import { userContext } from "../UserContext";
|
import { userContext } from "../UserContext";
|
||||||
import { getCollectionName, getDatabaseName } from "../Utils/APITypeUtils";
|
import { getCollectionName, getDatabaseName } from "../Utils/APITypeUtils";
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
* Accordion top class
|
* Accordion top class
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import TriangleDownIcon from "images/Triangle-down.svg";
|
||||||
|
import TriangleRightIcon from "images/Triangle-right.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import AnimateHeight from "react-animate-height";
|
import AnimateHeight from "react-animate-height";
|
||||||
import TriangleDownIcon from "../../../../images/Triangle-down.svg";
|
|
||||||
import TriangleRightIcon from "../../../../images/Triangle-right.svg";
|
|
||||||
import * as Constants from "../../../Common/Constants";
|
import * as Constants from "../../../Common/Constants";
|
||||||
|
|
||||||
export interface AccordionComponentProps {}
|
export interface AccordionComponentProps {}
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
* - calling render()
|
* - calling render()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import LeftArrowIcon from "images/imgarrowlefticon.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import LeftArrowIcon from "../../../../images/imgarrowlefticon.svg";
|
|
||||||
import { AccessibleElement } from "../../Controls/AccessibleElement/AccessibleElement";
|
import { AccessibleElement } from "../../Controls/AccessibleElement/AccessibleElement";
|
||||||
|
|
||||||
export interface CollapsiblePanelProps {
|
export interface CollapsiblePanelProps {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
import CollapseChevronDownIcon from "images/QueryBuilder/CollapseChevronDown_16x.png";
|
||||||
/**
|
/**
|
||||||
* React component for Command button component.
|
* React component for Command button component.
|
||||||
*/
|
*/
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import CollapseChevronDownIcon from "../../../../images/QueryBuilder/CollapseChevronDown_16x.png";
|
|
||||||
import { KeyCodes } from "../../../Common/Constants";
|
import { KeyCodes } from "../../../Common/Constants";
|
||||||
import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants";
|
import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants";
|
||||||
import * as TelemetryProcessor from "../../../Shared/Telemetry/TelemetryProcessor";
|
import * as TelemetryProcessor from "../../../Shared/Telemetry/TelemetryProcessor";
|
||||||
@@ -204,11 +204,9 @@ export class CommandButtonComponent extends React.Component<CommandButtonCompone
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="commandDropdown">
|
<div className="commandDropdown">
|
||||||
{this.props.children.map(
|
{this.props.children.map((c: CommandButtonComponentProps, index: number): JSX.Element => {
|
||||||
(c: CommandButtonComponentProps, index: number): JSX.Element => {
|
|
||||||
return CommandButtonComponent.renderButton(c, `${index}`);
|
return CommandButtonComponent.renderButton(c, `${index}`);
|
||||||
}
|
})}
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
/**
|
||||||
|
* React component for Switch Directory
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Dropdown, IDropdownOption, IDropdownProps } from "@fluentui/react";
|
||||||
|
import * as React from "react";
|
||||||
|
import _ from "underscore";
|
||||||
|
import { Tenant } from "../../../Contracts/DataModels";
|
||||||
|
|
||||||
|
export interface DefaultDirectoryDropdownProps {
|
||||||
|
directories: Array<Tenant>;
|
||||||
|
defaultDirectoryId: string;
|
||||||
|
onDefaultDirectoryChange: (newDirectory: Tenant) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DefaultDirectoryDropdownComponent extends React.Component<DefaultDirectoryDropdownProps> {
|
||||||
|
public static readonly lastVisitedKey: string = "lastVisited";
|
||||||
|
|
||||||
|
public render(): JSX.Element {
|
||||||
|
const lastVisitedOption: IDropdownOption = {
|
||||||
|
key: DefaultDirectoryDropdownComponent.lastVisitedKey,
|
||||||
|
text: "Sign in to your last visited directory",
|
||||||
|
};
|
||||||
|
const directoryOptions: Array<IDropdownOption> = this.props.directories.map((dirc): IDropdownOption => {
|
||||||
|
return {
|
||||||
|
key: dirc.tenantId,
|
||||||
|
text: `${dirc.displayName}(${dirc.tenantId})`,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const dropDownOptions: Array<IDropdownOption> = [lastVisitedOption, ...directoryOptions];
|
||||||
|
const dropDownProps: IDropdownProps = {
|
||||||
|
label: "Set your default directory",
|
||||||
|
options: dropDownOptions,
|
||||||
|
defaultSelectedKey: this.props.defaultDirectoryId ? this.props.defaultDirectoryId : lastVisitedOption.key,
|
||||||
|
onChange: this._onDropdownChange,
|
||||||
|
className: "defaultDirectoryDropdown",
|
||||||
|
};
|
||||||
|
|
||||||
|
return <Dropdown {...dropDownProps} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onDropdownChange = (e: React.FormEvent<HTMLDivElement>, option?: IDropdownOption, index?: number): void => {
|
||||||
|
if (!option || !option.key) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (option.key === this.props.defaultDirectoryId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (option.key === DefaultDirectoryDropdownComponent.lastVisitedKey) {
|
||||||
|
this.props.onDefaultDirectoryChange({
|
||||||
|
tenantId: option.key,
|
||||||
|
countryCode: undefined,
|
||||||
|
displayName: undefined,
|
||||||
|
domains: [],
|
||||||
|
id: undefined,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const selectedDirectory = _.find(this.props.directories, (d) => d.tenantId === option.key);
|
||||||
|
if (!selectedDirectory) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.props.onDefaultDirectoryChange(selectedDirectory);
|
||||||
|
};
|
||||||
|
}
|
||||||
35
src/Explorer/Controls/DynamicList/dynamic-list.html
Normal file
35
src/Explorer/Controls/DynamicList/dynamic-list.html
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<div class="dynamicList" data-bind="setTemplateReady: true">
|
||||||
|
<div class="dynamicListContainer" data-bind="foreach: listItems">
|
||||||
|
<div class="dynamicListItem">
|
||||||
|
<input
|
||||||
|
id="uniqueKeyItems"
|
||||||
|
type="text"
|
||||||
|
autocomplete="off"
|
||||||
|
data-bind="value: value, attr: {placeholder: $parent.placeholder, 'aria-label': $parent.ariaLabel}"
|
||||||
|
/>
|
||||||
|
<span
|
||||||
|
class="dynamicListItemDelete"
|
||||||
|
title="Remove item"
|
||||||
|
role="button"
|
||||||
|
aria-label="Remove item"
|
||||||
|
tabindex="0"
|
||||||
|
data-bind="click: $parent.removeItem, event: { keydown: $parent.onRemoveItemKeyPress }"
|
||||||
|
>
|
||||||
|
<img src="/images/delete.svg" alt="Remove item" />
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="dynamicListItemNew">
|
||||||
|
<span
|
||||||
|
class="dynamicListItemAdd"
|
||||||
|
id="addUniqueKeyBtn"
|
||||||
|
role="button"
|
||||||
|
aria-label="Add unique key"
|
||||||
|
tabindex="0"
|
||||||
|
data-bind="click: addItem, event: { keydown: onAddItemKeyPress }"
|
||||||
|
>
|
||||||
|
<img src="/images/Add-property.svg" data-bind="attr: {alt: buttonText}" />
|
||||||
|
<span data-bind="text: buttonText"></span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<div class="warningErrorContainer" data-bind="visible: !!params.errorMsg()">
|
||||||
|
<div class="warningErrorContent">
|
||||||
|
<span><img src="/images/error_red.svg" alt="Error" /></span>
|
||||||
|
<span class="settingErrorMsg warningErrorDetailsLinkContainer" data-bind="text: params.errorMsg()"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -111,9 +111,7 @@ describe("NotebookTerminalComponent", () => {
|
|||||||
const terminal: NotebookTerminalComponent = createTerminal();
|
const terminal: NotebookTerminalComponent = createTerminal();
|
||||||
const params: Map<string, string> = terminal.getTerminalParams();
|
const params: Map<string, string> = terminal.getTerminalParams();
|
||||||
|
|
||||||
expect(params).toEqual(
|
expect(params).toEqual(new Map<string, string>([["terminal", "true"]]));
|
||||||
new Map<string, string>([["terminal", "true"]])
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("getTerminalParams: Test for Mongo 3.2 terminal", () => {
|
it("getTerminalParams: Test for Mongo 3.2 terminal", () => {
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ import {
|
|||||||
Text,
|
Text,
|
||||||
TooltipHost,
|
TooltipHost,
|
||||||
} from "@fluentui/react";
|
} from "@fluentui/react";
|
||||||
|
import CosmosDBLogo from "images/CosmosDB-logo.svg";
|
||||||
import React, { FunctionComponent, useState } from "react";
|
import React, { FunctionComponent, useState } from "react";
|
||||||
import CosmosDBLogo from "../../../../../images/CosmosDB-logo.svg";
|
|
||||||
import { IGalleryItem } from "../../../../Juno/JunoClient";
|
import { IGalleryItem } from "../../../../Juno/JunoClient";
|
||||||
import * as FileSystemUtil from "../../../Notebook/FileSystemUtil";
|
import * as FileSystemUtil from "../../../Notebook/FileSystemUtil";
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
* Wrapper around Notebook metadata
|
* Wrapper around Notebook metadata
|
||||||
*/
|
*/
|
||||||
import { FontWeights, Icon, IconButton, Link, Persona, PersonaSize, PrimaryButton, Stack, Text } from "@fluentui/react";
|
import { FontWeights, Icon, IconButton, Link, Persona, PersonaSize, PrimaryButton, Stack, Text } from "@fluentui/react";
|
||||||
|
import CosmosDBLogo from "images/CosmosDB-logo.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { IGalleryItem } from "../../../Juno/JunoClient";
|
import { IGalleryItem } from "../../../Juno/JunoClient";
|
||||||
import * as FileSystemUtil from "../../Notebook/FileSystemUtil";
|
import * as FileSystemUtil from "../../Notebook/FileSystemUtil";
|
||||||
import "./NotebookViewerComponent.less";
|
|
||||||
import CosmosDBLogo from "../../../../images/CosmosDB-logo.svg";
|
|
||||||
import { InfoComponent } from "../NotebookGallery/InfoComponent/InfoComponent";
|
import { InfoComponent } from "../NotebookGallery/InfoComponent/InfoComponent";
|
||||||
|
import "./NotebookViewerComponent.less";
|
||||||
|
|
||||||
export interface NotebookMetadataComponentProps {
|
export interface NotebookMetadataComponentProps {
|
||||||
data: IGalleryItem;
|
data: IGalleryItem;
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ interface NotebookViewerComponentState {
|
|||||||
|
|
||||||
export class NotebookViewerComponent
|
export class NotebookViewerComponent
|
||||||
extends React.Component<NotebookViewerComponentProps, NotebookViewerComponentState>
|
extends React.Component<NotebookViewerComponentProps, NotebookViewerComponentState>
|
||||||
implements DialogHost {
|
implements DialogHost
|
||||||
|
{
|
||||||
private clientManager: NotebookClientV2;
|
private clientManager: NotebookClientV2;
|
||||||
private notebookComponentBootstrapper: NotebookComponentBootstrapper;
|
private notebookComponentBootstrapper: NotebookComponentBootstrapper;
|
||||||
|
|
||||||
|
|||||||
@@ -19,9 +19,9 @@ import {
|
|||||||
SelectionZone,
|
SelectionZone,
|
||||||
TextField,
|
TextField,
|
||||||
} from "@fluentui/react";
|
} from "@fluentui/react";
|
||||||
|
import SaveQueryBannerIcon from "images/save_query_banner.png";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import * as _ from "underscore";
|
import * as _ from "underscore";
|
||||||
import SaveQueryBannerIcon from "../../../../images/save_query_banner.png";
|
|
||||||
import * as Constants from "../../../Common/Constants";
|
import * as Constants from "../../../Common/Constants";
|
||||||
import { StyleConstants } from "../../../Common/Constants";
|
import { StyleConstants } from "../../../Common/Constants";
|
||||||
import { getErrorMessage, getErrorStack } from "../../../Common/ErrorHandlingUtils";
|
import { getErrorMessage, getErrorStack } from "../../../Common/ErrorHandlingUtils";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { IPivotItemProps, IPivotProps, Pivot, PivotItem } from "@fluentui/react";
|
import { IPivotItemProps, IPivotProps, Pivot, PivotItem } from "@fluentui/react";
|
||||||
|
import DiscardIcon from "images/discard.svg";
|
||||||
|
import SaveIcon from "images/save-cosmos.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import DiscardIcon from "../../../../images/discard.svg";
|
|
||||||
import SaveIcon from "../../../../images/save-cosmos.svg";
|
|
||||||
import { AuthType } from "../../../AuthType";
|
import { AuthType } from "../../../AuthType";
|
||||||
import * as Constants from "../../../Common/Constants";
|
import * as Constants from "../../../Common/Constants";
|
||||||
import { getIndexTransformationProgress } from "../../../Common/dataAccess/getIndexTransformationProgress";
|
import { getIndexTransformationProgress } from "../../../Common/dataAccess/getIndexTransformationProgress";
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { shallow } from "enzyme";
|
import { shallow } from "enzyme";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
import { renderToString } from "react-dom/server";
|
||||||
import { MongoIndexTypes, MongoNotificationMessage, MongoNotificationType } from "../../SettingsUtils";
|
import { MongoIndexTypes, MongoNotificationMessage, MongoNotificationType } from "../../SettingsUtils";
|
||||||
import { MongoIndexingPolicyComponent, MongoIndexingPolicyComponentProps } from "./MongoIndexingPolicyComponent";
|
import { MongoIndexingPolicyComponent, MongoIndexingPolicyComponentProps } from "./MongoIndexingPolicyComponent";
|
||||||
import { renderToString } from "react-dom/server";
|
|
||||||
|
|
||||||
describe("MongoIndexingPolicyComponent", () => {
|
describe("MongoIndexingPolicyComponent", () => {
|
||||||
const baseProps: MongoIndexingPolicyComponentProps = {
|
const baseProps: MongoIndexingPolicyComponentProps = {
|
||||||
@@ -84,7 +84,7 @@ describe("MongoIndexingPolicyComponent", () => {
|
|||||||
];
|
];
|
||||||
|
|
||||||
test.each(cases)(
|
test.each(cases)(
|
||||||
"",
|
"test Mongo Indexing Policy",
|
||||||
(
|
(
|
||||||
notification: MongoNotificationMessage,
|
notification: MongoNotificationMessage,
|
||||||
indexToDropIsPresent: boolean,
|
indexToDropIsPresent: boolean,
|
||||||
@@ -109,12 +109,13 @@ describe("MongoIndexingPolicyComponent", () => {
|
|||||||
expect(mongoIndexingPolicyComponent.isMongoIndexingPolicyDiscardable()).toEqual(
|
expect(mongoIndexingPolicyComponent.isMongoIndexingPolicyDiscardable()).toEqual(
|
||||||
isMongoIndexingPolicyDiscardable
|
isMongoIndexingPolicyDiscardable
|
||||||
);
|
);
|
||||||
if (mongoWarningNotificationMessage) {
|
|
||||||
const elementAsString = renderToString(mongoIndexingPolicyComponent.getMongoWarningNotificationMessage());
|
const warningNotificationElementAsString = renderToString(
|
||||||
expect(elementAsString).toContain(mongoWarningNotificationMessage);
|
mongoIndexingPolicyComponent.getMongoWarningNotificationMessage()
|
||||||
} else {
|
);
|
||||||
expect(mongoIndexingPolicyComponent.getMongoWarningNotificationMessage()).toBeUndefined();
|
expect(warningNotificationElementAsString.includes(mongoWarningNotificationMessage)).toEqual(
|
||||||
}
|
!!mongoWarningNotificationMessage
|
||||||
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import Explorer from "../../Explorer";
|
|||||||
|
|
||||||
export const container = new Explorer();
|
export const container = new Explorer();
|
||||||
|
|
||||||
export const collection = ({
|
export const collection = {
|
||||||
container: container,
|
container: container,
|
||||||
databaseId: "test",
|
databaseId: "test",
|
||||||
id: ko.observable<string>("test"),
|
id: ko.observable<string>("test"),
|
||||||
@@ -43,4 +43,4 @@ export const collection = ({
|
|||||||
readSettings: () => {
|
readSettings: () => {
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
} as unknown) as ViewModels.Collection;
|
} as unknown as ViewModels.Collection;
|
||||||
|
|||||||
@@ -0,0 +1,194 @@
|
|||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<p class="pkPadding">
|
||||||
|
<!-- ko if: showAsMandatory -->
|
||||||
|
<span class="mandatoryStar">*</span>
|
||||||
|
<!-- /ko -->
|
||||||
|
|
||||||
|
<span data-bind="text: label"></span>
|
||||||
|
|
||||||
|
<!-- ko if: infoBubbleText -->
|
||||||
|
<span class="infoTooltip" role="tooltip" tabindex="0">
|
||||||
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
|
<span data-bind="text: infoBubbleText" class="tooltiptext throughputRuInfo"></span>
|
||||||
|
</span>
|
||||||
|
<!-- /ko -->
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ko if: !isFixed -->
|
||||||
|
<div class="throughputModeContainer">
|
||||||
|
<input
|
||||||
|
class="throughputModeRadio"
|
||||||
|
aria-label="Autopilot mode"
|
||||||
|
type="radio"
|
||||||
|
role="radio"
|
||||||
|
tabindex="0"
|
||||||
|
data-bind="
|
||||||
|
checked: isAutoPilotSelected,
|
||||||
|
checkedValue: true,
|
||||||
|
attr: {
|
||||||
|
id: throughputAutoPilotRadioId,
|
||||||
|
name: throughputModeRadioName,
|
||||||
|
'aria-checked': isAutoPilotSelected() ? 'true' : 'false'
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
<span
|
||||||
|
class="throughputModeSpace"
|
||||||
|
data-bind="
|
||||||
|
attr: {
|
||||||
|
for: throughputAutoPilotRadioId
|
||||||
|
}"
|
||||||
|
>Autoscale
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<input
|
||||||
|
class="throughputModeRadio nonFirstRadio"
|
||||||
|
aria-label="Manual mode"
|
||||||
|
type="radio"
|
||||||
|
role="radio"
|
||||||
|
tabindex="0"
|
||||||
|
data-bind="
|
||||||
|
checked: isAutoPilotSelected,
|
||||||
|
checkedValue: false,
|
||||||
|
attr: {
|
||||||
|
id: throughputProvisionedRadioId,
|
||||||
|
name: throughputModeRadioName,
|
||||||
|
'aria-checked': !isAutoPilotSelected() ? 'true' : 'false'
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
<span
|
||||||
|
class="throughputModeSpace"
|
||||||
|
data-bind="attr: {
|
||||||
|
for: throughputProvisionedRadioId
|
||||||
|
}"
|
||||||
|
>Manual
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<!-- /ko -->
|
||||||
|
|
||||||
|
<div data-bind="visible: isAutoPilotSelected">
|
||||||
|
<p>
|
||||||
|
<span
|
||||||
|
>Provision maximum RU/s required by this resource. Estimate your required RU/s with
|
||||||
|
<a target="_blank" href="https://cosmos.azure.com/capacitycalculator/">capacity calculator</a>.</span
|
||||||
|
>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<span>Max RU/s</span>
|
||||||
|
</p>
|
||||||
|
<div data-bind="setTemplateReady: true">
|
||||||
|
<input
|
||||||
|
data-bind="textInput: overrideWithProvisionedThroughputSettings() ? '' : maxAutoPilotThroughputSet, attr:{
|
||||||
|
disabled: overrideWithProvisionedThroughputSettings(),
|
||||||
|
step: step,
|
||||||
|
'class':'migration collid select-font-size',
|
||||||
|
min: minAutoPilotThroughput,
|
||||||
|
'aria-label': 'Max request units per second',
|
||||||
|
type: isAutoscaleThroughputInputFieldRequired() ? 'number' : 'hidden',
|
||||||
|
css: {
|
||||||
|
dirty: maxAutoPilotThroughputSet.editableIsDirty
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<p data-bind="visible: overrideWithProvisionedThroughputSettings && !overrideWithProvisionedThroughputSettings()">
|
||||||
|
<span
|
||||||
|
data-bind="
|
||||||
|
html: autoPilotUsageCost"
|
||||||
|
></span>
|
||||||
|
</p>
|
||||||
|
<p
|
||||||
|
data-bind="visible: costsVisible && overrideWithProvisionedThroughputSettings && !overrideWithProvisionedThroughputSettings()"
|
||||||
|
>
|
||||||
|
<span data-bind="html: requestUnitsUsageCost"></span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- ko if: spendAckVisible -->
|
||||||
|
<p class="pkPadding">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
aria-label="acknowledge spend throughput"
|
||||||
|
data-bind="
|
||||||
|
attr: {
|
||||||
|
title: spendAckText,
|
||||||
|
id: spendAckId
|
||||||
|
},
|
||||||
|
checked: spendAckChecked"
|
||||||
|
/>
|
||||||
|
<span data-bind="text: spendAckText, attr: { for: spendAckId }"></span>
|
||||||
|
</p>
|
||||||
|
<!-- /ko -->
|
||||||
|
|
||||||
|
<!-- ko if: isFixed -->
|
||||||
|
<p>Choose unlimited storage capacity for more than 10,000 RU/s.</p>
|
||||||
|
<!-- /ko -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div data-bind="visible: !isAutoPilotSelected()">
|
||||||
|
<p>
|
||||||
|
<span
|
||||||
|
>Estimate your required throughput with
|
||||||
|
<a target="_blank" href="https://cosmos.azure.com/capacitycalculator/">capacity calculator</a></span
|
||||||
|
>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="inputTooltip">
|
||||||
|
<span
|
||||||
|
data-bind="text: freeTierExceedThroughputTooltip, visible: showFreeTierExceedThroughputTooltip"
|
||||||
|
class="inputTooltipText"
|
||||||
|
></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div data-bind="setTemplateReady: true">
|
||||||
|
<input
|
||||||
|
data-bind="
|
||||||
|
textInput: overrideWithAutoPilotSettings() ? maxAutoPilotThroughputSet : value,
|
||||||
|
css: {
|
||||||
|
dirty: value.editableIsDirty
|
||||||
|
},
|
||||||
|
enable: isEnabled,
|
||||||
|
attr:{
|
||||||
|
type: isManualThroughputInputFieldRequired() ? 'number' : 'hidden',
|
||||||
|
'data-test': testId,
|
||||||
|
'class': cssClass,
|
||||||
|
step: step,
|
||||||
|
min: minimum,
|
||||||
|
max: canExceedMaximumValue() ? null : maximum,
|
||||||
|
'aria-label': ariaLabel,
|
||||||
|
disabled: overrideWithAutoPilotSettings(),
|
||||||
|
required: isManualThroughputInputFieldRequired()
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="freeTierInlineWarning" data-bind="visible: showFreeTierExceedThroughputWarning">
|
||||||
|
<span class="freeTierWarningIcon"><img src="/images/warning.svg" alt="Warning" /></span>
|
||||||
|
<span class="freeTierWarningMessage" data-bind="text: freeTierExceedThroughputWarning"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p data-bind="visible: costsVisible">
|
||||||
|
<span data-bind="html: requestUnitsUsageCost"></span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- ko if: spendAckVisible -->
|
||||||
|
<p class="pkPadding">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
aria-label="acknowledge spend throughput"
|
||||||
|
data-bind="
|
||||||
|
attr: {
|
||||||
|
title: spendAckText,
|
||||||
|
id: spendAckId
|
||||||
|
},
|
||||||
|
checked: spendAckChecked"
|
||||||
|
/>
|
||||||
|
<span data-bind="text: spendAckText, attr: { for: spendAckId }"></span>
|
||||||
|
</p>
|
||||||
|
<!-- /ko -->
|
||||||
|
|
||||||
|
<!-- ko if: isFixed -->
|
||||||
|
<p>Choose unlimited storage capacity for more than 10,000 RU/s.</p>
|
||||||
|
<!-- /ko -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -12,11 +12,11 @@ import {
|
|||||||
IContextualMenuItemProps,
|
IContextualMenuItemProps,
|
||||||
IContextualMenuProps,
|
IContextualMenuProps,
|
||||||
} from "@fluentui/react";
|
} from "@fluentui/react";
|
||||||
|
import LoadingIndicator_3Squares from "images/LoadingIndicator_3Squares.gif";
|
||||||
|
import TriangleDownIcon from "images/Triangle-down.svg";
|
||||||
|
import TriangleRightIcon from "images/Triangle-right.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import AnimateHeight from "react-animate-height";
|
import AnimateHeight from "react-animate-height";
|
||||||
import LoadingIndicator_3Squares from "../../../../images/LoadingIndicator_3Squares.gif";
|
|
||||||
import TriangleDownIcon from "../../../../images/Triangle-down.svg";
|
|
||||||
import TriangleRightIcon from "../../../../images/Triangle-right.svg";
|
|
||||||
import * as Constants from "../../../Common/Constants";
|
import * as Constants from "../../../Common/Constants";
|
||||||
import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants";
|
import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants";
|
||||||
import * as TelemetryProcessor from "../../../Shared/Telemetry/TelemetryProcessor";
|
import * as TelemetryProcessor from "../../../Shared/Telemetry/TelemetryProcessor";
|
||||||
|
|||||||
@@ -793,9 +793,9 @@ export default class Explorer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public findSelectedCollection(): ViewModels.Collection {
|
public findSelectedCollection(): ViewModels.Collection {
|
||||||
return (this.selectedNode().nodeKind === "Collection"
|
return (
|
||||||
? this.selectedNode()
|
this.selectedNode().nodeKind === "Collection" ? this.selectedNode() : this.selectedNode().collection
|
||||||
: this.selectedNode().collection) as ViewModels.Collection;
|
) as ViewModels.Collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public isRunningOnNationalCloud(): boolean {
|
public isRunningOnNationalCloud(): boolean {
|
||||||
@@ -887,9 +887,7 @@ export default class Explorer {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private getDeltaDatabases(
|
private getDeltaDatabases(updatedDatabaseList: DataModels.Database[]): {
|
||||||
updatedDatabaseList: DataModels.Database[]
|
|
||||||
): {
|
|
||||||
toAdd: ViewModels.Database[];
|
toAdd: ViewModels.Database[];
|
||||||
toDelete: ViewModels.Database[];
|
toDelete: ViewModels.Database[];
|
||||||
} {
|
} {
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
* Editor for neighbors (targets or sources)
|
* Editor for neighbors (targets or sources)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import AddPropertyIcon from "images/Add-property.svg";
|
||||||
|
import DeleteIcon from "images/delete.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { NeighborVertexBasicInfo, EditedEdges, GraphNewEdgeData, PossibleVertex } from "./GraphExplorer";
|
|
||||||
import * as GraphUtil from "./GraphUtil";
|
|
||||||
import * as InputTypeaheadComponent from "../../Controls/InputTypeahead/InputTypeaheadComponent";
|
|
||||||
import DeleteIcon from "../../../../images/delete.svg";
|
|
||||||
import AddPropertyIcon from "../../../../images/Add-property.svg";
|
|
||||||
import { AccessibleElement } from "../../Controls/AccessibleElement/AccessibleElement";
|
import { AccessibleElement } from "../../Controls/AccessibleElement/AccessibleElement";
|
||||||
|
import * as InputTypeaheadComponent from "../../Controls/InputTypeahead/InputTypeaheadComponent";
|
||||||
|
import { EditedEdges, GraphNewEdgeData, NeighborVertexBasicInfo, PossibleVertex } from "./GraphExplorer";
|
||||||
|
import * as GraphUtil from "./GraphUtil";
|
||||||
|
|
||||||
export interface EditorNeighborsComponentProps {
|
export interface EditorNeighborsComponentProps {
|
||||||
isSource: boolean;
|
isSource: boolean;
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
* Read-only properties
|
* Read-only properties
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import AddIcon from "images/Add-property.svg";
|
||||||
|
import DeleteIcon from "images/delete.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import * as ViewModels from "../../../Contracts/ViewModels";
|
import * as ViewModels from "../../../Contracts/ViewModels";
|
||||||
import { EditedProperties } from "./GraphExplorer";
|
|
||||||
import DeleteIcon from "../../../../images/delete.svg";
|
|
||||||
import AddIcon from "../../../../images/Add-property.svg";
|
|
||||||
import { ReadOnlyNodePropertiesComponent } from "./ReadOnlyNodePropertiesComponent";
|
|
||||||
import { AccessibleElement } from "../../Controls/AccessibleElement/AccessibleElement";
|
import { AccessibleElement } from "../../Controls/AccessibleElement/AccessibleElement";
|
||||||
|
import { EditedProperties } from "./GraphExplorer";
|
||||||
|
import { ReadOnlyNodePropertiesComponent } from "./ReadOnlyNodePropertiesComponent";
|
||||||
|
|
||||||
export interface EditorNodePropertiesComponentProps {
|
export interface EditorNodePropertiesComponentProps {
|
||||||
editedProperties: EditedProperties;
|
editedProperties: EditedProperties;
|
||||||
|
|||||||
@@ -207,11 +207,9 @@ describe("GraphExplorer", () => {
|
|||||||
const gVRU = 123.456;
|
const gVRU = 123.456;
|
||||||
|
|
||||||
const disableMonacoEditor = (graphExplorer: GraphExplorer) => {
|
const disableMonacoEditor = (graphExplorer: GraphExplorer) => {
|
||||||
renderResultAsJsonStub = sinon.stub(graphExplorer, "renderResultAsJson").callsFake(
|
renderResultAsJsonStub = sinon.stub(graphExplorer, "renderResultAsJson").callsFake((): JSX.Element => {
|
||||||
(): JSX.Element => {
|
|
||||||
return <div>[Monaco Editor Stub]</div>;
|
return <div>[Monaco Editor Stub]</div>;
|
||||||
}
|
});
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
interface AjaxResponse {
|
interface AjaxResponse {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { FeedOptions, ItemDefinition, QueryIterator, Resource } from "@azure/cosmos";
|
import { FeedOptions, ItemDefinition, QueryIterator, Resource } from "@azure/cosmos";
|
||||||
|
import LoadGraphIcon from "images/LoadGraph.png";
|
||||||
|
import LoadingIndicatorIcon from "images/LoadingIndicator_3Squares.gif";
|
||||||
import * as Q from "q";
|
import * as Q from "q";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import LoadGraphIcon from "../../../../images/LoadGraph.png";
|
|
||||||
import LoadingIndicatorIcon from "../../../../images/LoadingIndicator_3Squares.gif";
|
|
||||||
import * as Constants from "../../../Common/Constants";
|
import * as Constants from "../../../Common/Constants";
|
||||||
import { queryDocuments } from "../../../Common/dataAccess/queryDocuments";
|
import { queryDocuments } from "../../../Common/dataAccess/queryDocuments";
|
||||||
import { queryDocumentsPage } from "../../../Common/dataAccess/queryDocumentsPage";
|
import { queryDocumentsPage } from "../../../Common/dataAccess/queryDocumentsPage";
|
||||||
@@ -633,8 +633,7 @@ export class GraphExplorer extends React.Component<GraphExplorerProps, GraphExpl
|
|||||||
promise = Q.resolve(0);
|
promise = Q.resolve(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
promise = promise.then(
|
promise = promise.then((outEPairsNb: number): Q.Promise<number> => {
|
||||||
(outEPairsNb: number): Q.Promise<number> => {
|
|
||||||
const inEdgesToFetch = totalEdgesToFetch - outEPairsNb;
|
const inEdgesToFetch = totalEdgesToFetch - outEPairsNb;
|
||||||
if (!vertex._inEAllLoaded && inEdgesToFetch > 0) {
|
if (!vertex._inEAllLoaded && inEdgesToFetch > 0) {
|
||||||
let start: number;
|
let start: number;
|
||||||
@@ -665,8 +664,7 @@ export class GraphExplorer extends React.Component<GraphExplorerProps, GraphExpl
|
|||||||
} else {
|
} else {
|
||||||
return Q.resolve(outEPairsNb);
|
return Q.resolve(outEPairsNb);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
|
||||||
return promise.then((nbPairsFetched: number) => {
|
return promise.then((nbPairsFetched: number) => {
|
||||||
if (offsetIndex >= GraphExplorer.LOAD_PAGE_SIZE || !vertex._outEAllLoaded || !vertex._inEAllLoaded) {
|
if (offsetIndex >= GraphExplorer.LOAD_PAGE_SIZE || !vertex._outEAllLoaded || !vertex._inEAllLoaded) {
|
||||||
@@ -1221,16 +1219,13 @@ export class GraphExplorer extends React.Component<GraphExplorerProps, GraphExpl
|
|||||||
|
|
||||||
private getPossibleRootNodes(): LeftPane.CaptionId[] {
|
private getPossibleRootNodes(): LeftPane.CaptionId[] {
|
||||||
const key = this.state.igraphConfig.nodeCaption;
|
const key = this.state.igraphConfig.nodeCaption;
|
||||||
return $.map(
|
return $.map(this.state.rootMap, (value: any, index: number): LeftPane.CaptionId => {
|
||||||
this.state.rootMap,
|
|
||||||
(value: any, index: number): LeftPane.CaptionId => {
|
|
||||||
let result = GraphData.GraphData.getNodePropValue(value, key);
|
let result = GraphData.GraphData.getNodePropValue(value, key);
|
||||||
return {
|
return {
|
||||||
caption: result !== undefined ? result : value.id,
|
caption: result !== undefined ? result : value.id,
|
||||||
id: value.id,
|
id: value.id,
|
||||||
};
|
};
|
||||||
}
|
});
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -94,236 +94,16 @@ describe("Gremlin Simple Client", () => {
|
|||||||
result: { data: ["é"], meta: {} },
|
result: { data: ["é"], meta: {} },
|
||||||
};
|
};
|
||||||
const expectedDecodedUint8ArrayValues = [
|
const expectedDecodedUint8ArrayValues = [
|
||||||
123,
|
123, 34, 114, 101, 113, 117, 101, 115, 116, 73, 100, 34, 58, 34, 100, 55, 55, 50, 102, 56, 57, 55, 45, 48, 100,
|
||||||
34,
|
52, 100, 45, 52, 99, 100, 49, 45, 98, 51, 54, 48, 45, 100, 100, 102, 54, 99, 56, 54, 98, 57, 51, 97, 51, 34, 44,
|
||||||
114,
|
34, 115, 116, 97, 116, 117, 115, 34, 58, 123, 34, 99, 111, 100, 101, 34, 58, 50, 48, 48, 44, 34, 97, 116, 116,
|
||||||
101,
|
114, 105, 98, 117, 116, 101, 115, 34, 58, 123, 34, 103, 114, 97, 112, 104, 69, 120, 101, 99, 117, 116, 105, 111,
|
||||||
113,
|
110, 83, 116, 97, 116, 117, 115, 34, 58, 50, 48, 48, 44, 34, 83, 116, 111, 114, 97, 103, 101, 82, 85, 34, 58, 50,
|
||||||
117,
|
46, 50, 57, 44, 34, 67, 111, 109, 112, 117, 116, 101, 82, 85, 34, 58, 49, 46, 48, 55, 44, 34, 80, 101, 114, 80,
|
||||||
101,
|
97, 114, 116, 105, 116, 105, 111, 110, 67, 111, 109, 112, 117, 116, 101, 67, 104, 97, 114, 103, 101, 115, 34, 58,
|
||||||
115,
|
123, 125, 125, 44, 34, 109, 101, 115, 115, 97, 103, 101, 34, 58, 34, 34, 125, 44, 34, 114, 101, 115, 117, 108,
|
||||||
116,
|
116, 34, 58, 123, 34, 100, 97, 116, 97, 34, 58, 91, 34, 195, 169, 34, 93, 44, 34, 109, 101, 116, 97, 34, 58, 123,
|
||||||
73,
|
125, 125, 125,
|
||||||
100,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
34,
|
|
||||||
100,
|
|
||||||
55,
|
|
||||||
55,
|
|
||||||
50,
|
|
||||||
102,
|
|
||||||
56,
|
|
||||||
57,
|
|
||||||
55,
|
|
||||||
45,
|
|
||||||
48,
|
|
||||||
100,
|
|
||||||
52,
|
|
||||||
100,
|
|
||||||
45,
|
|
||||||
52,
|
|
||||||
99,
|
|
||||||
100,
|
|
||||||
49,
|
|
||||||
45,
|
|
||||||
98,
|
|
||||||
51,
|
|
||||||
54,
|
|
||||||
48,
|
|
||||||
45,
|
|
||||||
100,
|
|
||||||
100,
|
|
||||||
102,
|
|
||||||
54,
|
|
||||||
99,
|
|
||||||
56,
|
|
||||||
54,
|
|
||||||
98,
|
|
||||||
57,
|
|
||||||
51,
|
|
||||||
97,
|
|
||||||
51,
|
|
||||||
34,
|
|
||||||
44,
|
|
||||||
34,
|
|
||||||
115,
|
|
||||||
116,
|
|
||||||
97,
|
|
||||||
116,
|
|
||||||
117,
|
|
||||||
115,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
123,
|
|
||||||
34,
|
|
||||||
99,
|
|
||||||
111,
|
|
||||||
100,
|
|
||||||
101,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
50,
|
|
||||||
48,
|
|
||||||
48,
|
|
||||||
44,
|
|
||||||
34,
|
|
||||||
97,
|
|
||||||
116,
|
|
||||||
116,
|
|
||||||
114,
|
|
||||||
105,
|
|
||||||
98,
|
|
||||||
117,
|
|
||||||
116,
|
|
||||||
101,
|
|
||||||
115,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
123,
|
|
||||||
34,
|
|
||||||
103,
|
|
||||||
114,
|
|
||||||
97,
|
|
||||||
112,
|
|
||||||
104,
|
|
||||||
69,
|
|
||||||
120,
|
|
||||||
101,
|
|
||||||
99,
|
|
||||||
117,
|
|
||||||
116,
|
|
||||||
105,
|
|
||||||
111,
|
|
||||||
110,
|
|
||||||
83,
|
|
||||||
116,
|
|
||||||
97,
|
|
||||||
116,
|
|
||||||
117,
|
|
||||||
115,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
50,
|
|
||||||
48,
|
|
||||||
48,
|
|
||||||
44,
|
|
||||||
34,
|
|
||||||
83,
|
|
||||||
116,
|
|
||||||
111,
|
|
||||||
114,
|
|
||||||
97,
|
|
||||||
103,
|
|
||||||
101,
|
|
||||||
82,
|
|
||||||
85,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
50,
|
|
||||||
46,
|
|
||||||
50,
|
|
||||||
57,
|
|
||||||
44,
|
|
||||||
34,
|
|
||||||
67,
|
|
||||||
111,
|
|
||||||
109,
|
|
||||||
112,
|
|
||||||
117,
|
|
||||||
116,
|
|
||||||
101,
|
|
||||||
82,
|
|
||||||
85,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
49,
|
|
||||||
46,
|
|
||||||
48,
|
|
||||||
55,
|
|
||||||
44,
|
|
||||||
34,
|
|
||||||
80,
|
|
||||||
101,
|
|
||||||
114,
|
|
||||||
80,
|
|
||||||
97,
|
|
||||||
114,
|
|
||||||
116,
|
|
||||||
105,
|
|
||||||
116,
|
|
||||||
105,
|
|
||||||
111,
|
|
||||||
110,
|
|
||||||
67,
|
|
||||||
111,
|
|
||||||
109,
|
|
||||||
112,
|
|
||||||
117,
|
|
||||||
116,
|
|
||||||
101,
|
|
||||||
67,
|
|
||||||
104,
|
|
||||||
97,
|
|
||||||
114,
|
|
||||||
103,
|
|
||||||
101,
|
|
||||||
115,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
123,
|
|
||||||
125,
|
|
||||||
125,
|
|
||||||
44,
|
|
||||||
34,
|
|
||||||
109,
|
|
||||||
101,
|
|
||||||
115,
|
|
||||||
115,
|
|
||||||
97,
|
|
||||||
103,
|
|
||||||
101,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
34,
|
|
||||||
34,
|
|
||||||
125,
|
|
||||||
44,
|
|
||||||
34,
|
|
||||||
114,
|
|
||||||
101,
|
|
||||||
115,
|
|
||||||
117,
|
|
||||||
108,
|
|
||||||
116,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
123,
|
|
||||||
34,
|
|
||||||
100,
|
|
||||||
97,
|
|
||||||
116,
|
|
||||||
97,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
91,
|
|
||||||
34,
|
|
||||||
195,
|
|
||||||
169,
|
|
||||||
34,
|
|
||||||
93,
|
|
||||||
44,
|
|
||||||
34,
|
|
||||||
109,
|
|
||||||
101,
|
|
||||||
116,
|
|
||||||
97,
|
|
||||||
34,
|
|
||||||
58,
|
|
||||||
123,
|
|
||||||
125,
|
|
||||||
125,
|
|
||||||
125,
|
|
||||||
];
|
];
|
||||||
// We do our best here to emulate what the server should return
|
// We do our best here to emulate what the server should return
|
||||||
const gremlinResponseData = new Uint8Array(<any>expectedDecodedUint8ArrayValues).buffer;
|
const gremlinResponseData = new Uint8Array(<any>expectedDecodedUint8ArrayValues).buffer;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
import CollapseArrowIcon from "images/Collapse_arrow_14x14.svg";
|
||||||
|
import ExpandIcon from "images/Expand_14x14.svg";
|
||||||
|
import LoadingIndicatorIcon from "images/LoadingIndicator_3Squares.gif";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { GraphVizComponent, GraphVizComponentProps } from "./GraphVizComponent";
|
import { GraphVizComponent, GraphVizComponentProps } from "./GraphVizComponent";
|
||||||
import CollapseArrowIcon from "../../../../images/Collapse_arrow_14x14.svg";
|
|
||||||
import ExpandIcon from "../../../../images/Expand_14x14.svg";
|
|
||||||
import LoadingIndicatorIcon from "../../../../images/LoadingIndicator_3Squares.gif";
|
|
||||||
|
|
||||||
interface MiddlePaneComponentProps {
|
interface MiddlePaneComponentProps {
|
||||||
isTabsContentExpanded: boolean;
|
isTabsContentExpanded: boolean;
|
||||||
|
|||||||
@@ -4,22 +4,27 @@
|
|||||||
* The mode is controlled by the parent of this component
|
* The mode is controlled by the parent of this component
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import CancelIcon from "images/cancel.svg";
|
||||||
|
import CheckIcon from "images/check1.svg";
|
||||||
|
import DeleteIcon from "images/delete.svg";
|
||||||
|
import EditIcon from "images/Edit_entity.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { GraphHighlightedNodeData, EditedProperties, EditedEdges, PossibleVertex } from "./GraphExplorer";
|
|
||||||
import { CollapsiblePanel } from "../../Controls/CollapsiblePanel/CollapsiblePanel";
|
|
||||||
import { ReadOnlyNodePropertiesComponent } from "./ReadOnlyNodePropertiesComponent";
|
|
||||||
import { EditorNodePropertiesComponent } from "./EditorNodePropertiesComponent";
|
|
||||||
import { ReadOnlyNeighborsComponent } from "./ReadOnlyNeighborsComponent";
|
|
||||||
import * as ViewModels from "../../../Contracts/ViewModels";
|
import * as ViewModels from "../../../Contracts/ViewModels";
|
||||||
import { Item } from "../../Controls/InputTypeahead/InputTypeaheadComponent";
|
|
||||||
import * as EditorNeighbors from "./EditorNeighborsComponent";
|
|
||||||
import EditIcon from "../../../../images/edit.svg";
|
|
||||||
import DeleteIcon from "../../../../images/delete.svg";
|
|
||||||
import CheckIcon from "../../../../images/check.svg";
|
|
||||||
import CancelIcon from "../../../../images/cancel.svg";
|
|
||||||
import { GraphExplorer } from "./GraphExplorer";
|
|
||||||
import { ConsoleDataType } from "../../Menus/NotificationConsole/NotificationConsoleComponent";
|
|
||||||
import { AccessibleElement } from "../../Controls/AccessibleElement/AccessibleElement";
|
import { AccessibleElement } from "../../Controls/AccessibleElement/AccessibleElement";
|
||||||
|
import { CollapsiblePanel } from "../../Controls/CollapsiblePanel/CollapsiblePanel";
|
||||||
|
import { Item } from "../../Controls/InputTypeahead/InputTypeaheadComponent";
|
||||||
|
import { ConsoleDataType } from "../../Menus/NotificationConsole/NotificationConsoleComponent";
|
||||||
|
import * as EditorNeighbors from "./EditorNeighborsComponent";
|
||||||
|
import { EditorNodePropertiesComponent } from "./EditorNodePropertiesComponent";
|
||||||
|
import {
|
||||||
|
EditedEdges,
|
||||||
|
EditedProperties,
|
||||||
|
GraphExplorer,
|
||||||
|
GraphHighlightedNodeData,
|
||||||
|
PossibleVertex,
|
||||||
|
} from "./GraphExplorer";
|
||||||
|
import { ReadOnlyNeighborsComponent } from "./ReadOnlyNeighborsComponent";
|
||||||
|
import { ReadOnlyNodePropertiesComponent } from "./ReadOnlyNodePropertiesComponent";
|
||||||
|
|
||||||
export enum Mode {
|
export enum Mode {
|
||||||
READONLY_PROP,
|
READONLY_PROP,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
import CloseIcon from "images/close-black.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import * as InputTypeaheadComponent from "../../Controls/InputTypeahead/InputTypeaheadComponent";
|
import * as InputTypeaheadComponent from "../../Controls/InputTypeahead/InputTypeaheadComponent";
|
||||||
import CloseIcon from "../../../../images/close-black.svg";
|
|
||||||
|
|
||||||
export interface QueryContainerComponentProps {
|
export interface QueryContainerComponentProps {
|
||||||
initialQuery: string;
|
initialQuery: string;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Dropdown, IDropdownOption, Stack, TextField } from "@fluentui/react";
|
import { Dropdown, IDropdownOption, Stack, TextField } from "@fluentui/react";
|
||||||
|
import AddIcon from "images/Add-property.svg";
|
||||||
|
import DeleteIcon from "images/delete.svg";
|
||||||
import React, { FunctionComponent, useRef, useState } from "react";
|
import React, { FunctionComponent, useRef, useState } from "react";
|
||||||
import AddIcon from "../../../../images/Add-property.svg";
|
|
||||||
import DeleteIcon from "../../../../images/delete.svg";
|
|
||||||
import { NormalizedEventKey } from "../../../Common/Constants";
|
import { NormalizedEventKey } from "../../../Common/Constants";
|
||||||
import { GremlinPropertyValueType, InputPropertyValueTypeString, NewVertexData } from "../../../Contracts/ViewModels";
|
import { GremlinPropertyValueType, InputPropertyValueTypeString, NewVertexData } from "../../../Contracts/ViewModels";
|
||||||
import { EditorNodePropertiesComponent } from "../GraphExplorerComponent/EditorNodePropertiesComponent";
|
import { EditorNodePropertiesComponent } from "../GraphExplorerComponent/EditorNodePropertiesComponent";
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
|
import AddCollectionIcon from "images/AddCollection.svg";
|
||||||
|
import AddDatabaseIcon from "images/AddDatabase.svg";
|
||||||
|
import AddSqlQueryIcon from "images/AddSqlQuery_16x16.svg";
|
||||||
|
import AddStoredProcedureIcon from "images/AddStoredProcedure.svg";
|
||||||
|
import AddTriggerIcon from "images/AddTrigger.svg";
|
||||||
|
import AddUdfIcon from "images/AddUdf.svg";
|
||||||
|
import BrowseQueriesIcon from "images/BrowseQuery.svg";
|
||||||
|
import CosmosTerminalIcon from "images/Cosmos-Terminal.svg";
|
||||||
|
import FeedbackIcon from "images/Feedback-Command.svg";
|
||||||
|
import GitHubIcon from "images/github.svg";
|
||||||
|
import HostedTerminalIcon from "images/Hosted-Terminal.svg";
|
||||||
|
import EnableNotebooksIcon from "images/notebook/Notebook-enable.svg";
|
||||||
|
import NewNotebookIcon from "images/notebook/Notebook-new.svg";
|
||||||
|
import ResetWorkspaceIcon from "images/notebook/Notebook-reset-workspace.svg";
|
||||||
|
import OpenInTabIcon from "images/open-in-tab.svg";
|
||||||
|
import OpenQueryFromDiskIcon from "images/OpenQueryFromDisk.svg";
|
||||||
|
import SettingsIcon from "images/settings_15x15.svg";
|
||||||
|
import SynapseIcon from "images/synapse-link.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import AddCollectionIcon from "../../../../images/AddCollection.svg";
|
|
||||||
import AddDatabaseIcon from "../../../../images/AddDatabase.svg";
|
|
||||||
import AddSqlQueryIcon from "../../../../images/AddSqlQuery_16x16.svg";
|
|
||||||
import AddStoredProcedureIcon from "../../../../images/AddStoredProcedure.svg";
|
|
||||||
import AddTriggerIcon from "../../../../images/AddTrigger.svg";
|
|
||||||
import AddUdfIcon from "../../../../images/AddUdf.svg";
|
|
||||||
import BrowseQueriesIcon from "../../../../images/BrowseQuery.svg";
|
|
||||||
import CosmosTerminalIcon from "../../../../images/Cosmos-Terminal.svg";
|
|
||||||
import FeedbackIcon from "../../../../images/Feedback-Command.svg";
|
|
||||||
import GitHubIcon from "../../../../images/github.svg";
|
|
||||||
import HostedTerminalIcon from "../../../../images/Hosted-Terminal.svg";
|
|
||||||
import EnableNotebooksIcon from "../../../../images/notebook/Notebook-enable.svg";
|
|
||||||
import NewNotebookIcon from "../../../../images/notebook/Notebook-new.svg";
|
|
||||||
import ResetWorkspaceIcon from "../../../../images/notebook/Notebook-reset-workspace.svg";
|
|
||||||
import OpenInTabIcon from "../../../../images/open-in-tab.svg";
|
|
||||||
import OpenQueryFromDiskIcon from "../../../../images/OpenQueryFromDisk.svg";
|
|
||||||
import SettingsIcon from "../../../../images/settings_15x15.svg";
|
|
||||||
import SynapseIcon from "../../../../images/synapse-link.svg";
|
|
||||||
import { AuthType } from "../../../AuthType";
|
import { AuthType } from "../../../AuthType";
|
||||||
import * as Constants from "../../../Common/Constants";
|
import * as Constants from "../../../Common/Constants";
|
||||||
import { configContext, Platform } from "../../../ConfigContext";
|
import { configContext, Platform } from "../../../ConfigContext";
|
||||||
|
|||||||
@@ -1,15 +1,8 @@
|
|||||||
import {
|
import { ICommandBarItemProps, IconType, IDropdownOption, IDropdownStyles } from "@fluentui/react";
|
||||||
Dropdown,
|
import ChevronDownIcon from "images/Chevron_down.svg";
|
||||||
ICommandBarItemProps,
|
|
||||||
IComponentAsProps,
|
|
||||||
IconType,
|
|
||||||
IDropdownOption,
|
|
||||||
IDropdownStyles,
|
|
||||||
} from "@fluentui/react";
|
|
||||||
import { Observable } from "knockout";
|
import { Observable } from "knockout";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import _ from "underscore";
|
import _ from "underscore";
|
||||||
import ChevronDownIcon from "../../../../images/Chevron_down.svg";
|
|
||||||
import { StyleConstants } from "../../../Common/Constants";
|
import { StyleConstants } from "../../../Common/Constants";
|
||||||
import { MemoryUsageInfo } from "../../../Contracts/DataModels";
|
import { MemoryUsageInfo } from "../../../Contracts/DataModels";
|
||||||
import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants";
|
import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants";
|
||||||
@@ -26,8 +19,7 @@ export const convertButton = (btns: CommandButtonComponentProps[], backgroundCol
|
|||||||
|
|
||||||
return btns
|
return btns
|
||||||
.filter((btn) => btn)
|
.filter((btn) => btn)
|
||||||
.map(
|
.map((btn: CommandButtonComponentProps, index: number): ICommandBarItemProps => {
|
||||||
(btn: CommandButtonComponentProps, index: number): ICommandBarItemProps => {
|
|
||||||
if (btn.isDivider) {
|
if (btn.isDivider) {
|
||||||
return createDivider(btn.commandButtonLabel);
|
return createDivider(btn.commandButtonLabel);
|
||||||
}
|
}
|
||||||
@@ -151,25 +143,11 @@ export const convertButton = (btns: CommandButtonComponentProps[], backgroundCol
|
|||||||
TelemetryProcessor.trace(Action.ClickCommandBarButton, ActionModifiers.Mark, { label: option.text });
|
TelemetryProcessor.trace(Action.ClickCommandBarButton, ActionModifiers.Mark, { label: option.text });
|
||||||
};
|
};
|
||||||
|
|
||||||
result.commandBarButtonAs = (props: IComponentAsProps<ICommandBarItemProps>) => {
|
return result;
|
||||||
return (
|
|
||||||
<Dropdown
|
|
||||||
placeholder={btn.dropdownPlaceholder}
|
|
||||||
defaultSelectedKey={btn.dropdownSelectedKey}
|
|
||||||
onChange={onDropdownChange}
|
|
||||||
options={btn.children.map((child: CommandButtonComponentProps) => ({
|
|
||||||
key: child.dropdownItemKey,
|
|
||||||
text: child.commandButtonLabel,
|
|
||||||
}))}
|
|
||||||
styles={dropdownStyles}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
});
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const createDivider = (key: string): ICommandBarItemProps => {
|
export const createDivider = (key: string): ICommandBarItemProps => {
|
||||||
|
|||||||
@@ -14,13 +14,11 @@ export interface ControlBarComponentProps {
|
|||||||
|
|
||||||
export class ControlBarComponent extends React.Component<ControlBarComponentProps> {
|
export class ControlBarComponent extends React.Component<ControlBarComponentProps> {
|
||||||
private static renderButtons(commandButtonOptions: CommandButtonComponentProps[]): JSX.Element[] {
|
private static renderButtons(commandButtonOptions: CommandButtonComponentProps[]): JSX.Element[] {
|
||||||
return commandButtonOptions.map(
|
return commandButtonOptions.map((btn: CommandButtonComponentProps, index: number): JSX.Element => {
|
||||||
(btn: CommandButtonComponentProps, index: number): JSX.Element => {
|
|
||||||
// Remove label
|
// Remove label
|
||||||
btn.commandButtonLabel = undefined;
|
btn.commandButtonLabel = undefined;
|
||||||
return CommandButtonComponent.renderButton(btn, `${index}`);
|
return CommandButtonComponent.renderButton(btn, `${index}`);
|
||||||
}
|
});
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public render(): JSX.Element {
|
public render(): JSX.Element {
|
||||||
|
|||||||
@@ -3,17 +3,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Dropdown, IDropdownOption } from "@fluentui/react";
|
import { Dropdown, IDropdownOption } from "@fluentui/react";
|
||||||
|
import LoaderIcon from "images/circular_loader_black_16x16.gif";
|
||||||
|
import { ReactComponent as ClearIcon } from "images/Clear1.svg";
|
||||||
|
import ErrorBlackIcon from "images/error_black.svg";
|
||||||
|
import ErrorRedIcon from "images/error_red.svg";
|
||||||
|
import infoBubbleIcon from "images/info-bubble-9x9.svg";
|
||||||
|
import InfoIcon from "images/info_color.svg";
|
||||||
|
import LoadingIcon from "images/loading.svg";
|
||||||
|
import ChevronDownIcon from "images/QueryBuilder/CollapseChevronDown_16x.png";
|
||||||
|
import ChevronUpIcon from "images/QueryBuilder/CollapseChevronUp_16x.png";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import AnimateHeight from "react-animate-height";
|
import AnimateHeight from "react-animate-height";
|
||||||
import LoaderIcon from "../../../../images/circular_loader_black_16x16.gif";
|
|
||||||
import ClearIcon from "../../../../images/Clear.svg";
|
|
||||||
import ErrorBlackIcon from "../../../../images/error_black.svg";
|
|
||||||
import ErrorRedIcon from "../../../../images/error_red.svg";
|
|
||||||
import infoBubbleIcon from "../../../../images/info-bubble-9x9.svg";
|
|
||||||
import InfoIcon from "../../../../images/info_color.svg";
|
|
||||||
import LoadingIcon from "../../../../images/loading.svg";
|
|
||||||
import ChevronDownIcon from "../../../../images/QueryBuilder/CollapseChevronDown_16x.png";
|
|
||||||
import ChevronUpIcon from "../../../../images/QueryBuilder/CollapseChevronUp_16x.png";
|
|
||||||
import { ClientDefaults, KeyCodes } from "../../../Common/Constants";
|
import { ClientDefaults, KeyCodes } from "../../../Common/Constants";
|
||||||
import { userContext } from "../../../UserContext";
|
import { userContext } from "../../../UserContext";
|
||||||
|
|
||||||
@@ -106,10 +106,12 @@ export class NotificationConsoleComponent extends React.Component<
|
|||||||
const numInProgress = this.state.allConsoleData.filter(
|
const numInProgress = this.state.allConsoleData.filter(
|
||||||
(data: ConsoleData) => data.type === ConsoleDataType.InProgress
|
(data: ConsoleData) => data.type === ConsoleDataType.InProgress
|
||||||
).length;
|
).length;
|
||||||
const numErroredItems = this.state.allConsoleData.filter((data: ConsoleData) => data.type === ConsoleDataType.Error)
|
const numErroredItems = this.state.allConsoleData.filter(
|
||||||
.length;
|
(data: ConsoleData) => data.type === ConsoleDataType.Error
|
||||||
const numInfoItems = this.state.allConsoleData.filter((data: ConsoleData) => data.type === ConsoleDataType.Info)
|
).length;
|
||||||
.length;
|
const numInfoItems = this.state.allConsoleData.filter(
|
||||||
|
(data: ConsoleData) => data.type === ConsoleDataType.Info
|
||||||
|
).length;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="notificationConsoleContainer">
|
<div className="notificationConsoleContainer">
|
||||||
@@ -179,7 +181,7 @@ export class NotificationConsoleComponent extends React.Component<
|
|||||||
onKeyDown={(event: React.KeyboardEvent<HTMLSpanElement>) => this.onClearNotificationsKeyPress(event)}
|
onKeyDown={(event: React.KeyboardEvent<HTMLSpanElement>) => this.onClearNotificationsKeyPress(event)}
|
||||||
tabIndex={0}
|
tabIndex={0}
|
||||||
>
|
>
|
||||||
<img src={ClearIcon} alt="clear notifications image" />
|
<ClearIcon />
|
||||||
Clear Notifications
|
Clear Notifications
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -149,10 +149,7 @@ exports[`NotificationConsoleComponent renders the console 1`] = `
|
|||||||
role="button"
|
role="button"
|
||||||
tabIndex={0}
|
tabIndex={0}
|
||||||
>
|
>
|
||||||
<img
|
<Component />
|
||||||
alt="clear notifications image"
|
|
||||||
src=""
|
|
||||||
/>
|
|
||||||
Clear Notifications
|
Clear Notifications
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -315,10 +312,7 @@ exports[`NotificationConsoleComponent renders the console 2`] = `
|
|||||||
role="button"
|
role="button"
|
||||||
tabIndex={0}
|
tabIndex={0}
|
||||||
>
|
>
|
||||||
<img
|
<Component />
|
||||||
alt="clear notifications image"
|
|
||||||
src=""
|
|
||||||
/>
|
|
||||||
Clear Notifications
|
Clear Notifications
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -192,13 +192,13 @@ export class NotebookClientV2 {
|
|||||||
* is triggered for *any* state change).
|
* is triggered for *any* state change).
|
||||||
* TODO: Use react-redux connect() to subscribe to state changes?
|
* TODO: Use react-redux connect() to subscribe to state changes?
|
||||||
*/
|
*/
|
||||||
const cacheKernelSpecsMiddleware: Middleware = <D extends Dispatch<AnyAction>, S extends AppState>({
|
const cacheKernelSpecsMiddleware: Middleware =
|
||||||
dispatch,
|
<D extends Dispatch<AnyAction>, S extends AppState>({ dispatch, getState }: MiddlewareAPI<D, S>) =>
|
||||||
getState,
|
(next: Dispatch<AnyAction>) =>
|
||||||
}: MiddlewareAPI<D, S>) => (next: Dispatch<AnyAction>) => <A extends AnyAction>(action: A): A => {
|
<A extends AnyAction>(action: A): A => {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case actions.FETCH_KERNELSPECS_FULFILLED: {
|
case actions.FETCH_KERNELSPECS_FULFILLED: {
|
||||||
const payload = ((action as unknown) as actions.FetchKernelspecsFulfilled).payload;
|
const payload = (action as unknown as actions.FetchKernelspecsFulfilled).payload;
|
||||||
const defaultKernelName = payload.defaultKernelName;
|
const defaultKernelName = payload.defaultKernelName;
|
||||||
this.kernelSpecsForDisplay = Object.values(payload.kernelspecs)
|
this.kernelSpecsForDisplay = Object.values(payload.kernelspecs)
|
||||||
.filter((spec) => !spec.metadata?.hasOwnProperty("hidden"))
|
.filter((spec) => !spec.metadata?.hasOwnProperty("hidden"))
|
||||||
|
|||||||
@@ -21,10 +21,10 @@ export default function configureStore(
|
|||||||
/**
|
/**
|
||||||
* Catches errors in reducers
|
* Catches errors in reducers
|
||||||
*/
|
*/
|
||||||
const catchErrorMiddleware: Middleware = <D extends Dispatch<AnyAction>, S extends AppState>({
|
const catchErrorMiddleware: Middleware =
|
||||||
dispatch,
|
<D extends Dispatch<AnyAction>, S extends AppState>({ dispatch, getState }: MiddlewareAPI<D, S>) =>
|
||||||
getState,
|
(next: Dispatch<AnyAction>) =>
|
||||||
}: MiddlewareAPI<D, S>) => (next: Dispatch<AnyAction>) => <A extends AnyAction>(action: A): any => {
|
<A extends AnyAction>(action: A): any => {
|
||||||
try {
|
try {
|
||||||
next(action);
|
next(action);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import MonacoEditor from "@nteract/stateful-components/lib/inputs/connected-edit
|
|||||||
import { PassedEditorProps } from "@nteract/stateful-components/lib/inputs/editor";
|
import { PassedEditorProps } from "@nteract/stateful-components/lib/inputs/editor";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { DndProvider } from "react-dnd";
|
import { DndProvider } from "react-dnd";
|
||||||
import HTML5Backend from "react-dnd-html5-backend";
|
import { HTML5Backend } from "react-dnd-html5-backend";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { Dispatch } from "redux";
|
import { Dispatch } from "redux";
|
||||||
import { userContext } from "../../../UserContext";
|
import { userContext } from "../../../UserContext";
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
import { actions, selectors, ContentRef, AppState } from "@nteract/core";
|
|
||||||
import { CellType } from "@nteract/commutable";
|
import { CellType } from "@nteract/commutable";
|
||||||
|
import { actions, AppState, ContentRef, selectors } from "@nteract/core";
|
||||||
|
import AddCodeCellIcon from "images/notebook/add-code-cell.svg";
|
||||||
|
import AddTextCellIcon from "images/notebook/add-text-cell.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { Dispatch } from "redux";
|
import { Dispatch } from "redux";
|
||||||
|
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import AddCodeCellIcon from "../../../../../images/notebook/add-code-cell.svg";
|
|
||||||
import AddTextCellIcon from "../../../../../images/notebook/add-text-cell.svg";
|
|
||||||
|
|
||||||
interface ComponentProps {
|
interface ComponentProps {
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import {
|
|||||||
DropTargetConnector,
|
DropTargetConnector,
|
||||||
DropTargetMonitor,
|
DropTargetMonitor,
|
||||||
} from "react-dnd";
|
} from "react-dnd";
|
||||||
|
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { Dispatch } from "redux";
|
import { Dispatch } from "redux";
|
||||||
import styled, { StyledComponent } from "styled-components";
|
import styled, { StyledComponent } from "styled-components";
|
||||||
@@ -124,8 +123,9 @@ export const cellTarget = {
|
|||||||
if (monitor) {
|
if (monitor) {
|
||||||
const hoverUpperHalf = isDragUpper(props, monitor, component.el);
|
const hoverUpperHalf = isDragUpper(props, monitor, component.el);
|
||||||
// DropTargetSpec monitor definition could be undefined. we'll need a check for monitor in order to pass validation.
|
// DropTargetSpec monitor definition could be undefined. we'll need a check for monitor in order to pass validation.
|
||||||
|
const item: Props = monitor.getItem();
|
||||||
props.moveCell({
|
props.moveCell({
|
||||||
id: monitor.getItem().id,
|
id: item.id,
|
||||||
destinationId: props.id,
|
destinationId: props.id,
|
||||||
above: hoverUpperHalf,
|
above: hoverUpperHalf,
|
||||||
contentRef: props.contentRef,
|
contentRef: props.contentRef,
|
||||||
|
|||||||
@@ -51,15 +51,8 @@ export class KeyboardShortcuts extends React.Component<Props> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const {
|
const { executeFocusedCell, focusNextCell, focusNextCellEditor, contentRef, cellOrder, focusedCell, cellMap } =
|
||||||
executeFocusedCell,
|
this.props;
|
||||||
focusNextCell,
|
|
||||||
focusNextCellEditor,
|
|
||||||
contentRef,
|
|
||||||
cellOrder,
|
|
||||||
focusedCell,
|
|
||||||
cellMap,
|
|
||||||
} = this.props;
|
|
||||||
|
|
||||||
let ctrlKeyPressed = e.ctrlKey;
|
let ctrlKeyPressed = e.ctrlKey;
|
||||||
// Allow cmd + enter (macOS) to operate like ctrl + enter
|
// Allow cmd + enter (macOS) to operate like ctrl + enter
|
||||||
|
|||||||
@@ -501,8 +501,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
|
|||||||
</TooltipHost>
|
</TooltipHost>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|
||||||
{this.state.uniqueKeys.map(
|
{this.state.uniqueKeys.map((uniqueKey: string, i: number): JSX.Element => {
|
||||||
(uniqueKey: string, i: number): JSX.Element => {
|
|
||||||
return (
|
return (
|
||||||
<Stack style={{ marginBottom: 8 }} key={`uniqueKey${i}`} horizontal>
|
<Stack style={{ marginBottom: 8 }} key={`uniqueKey${i}`} horizontal>
|
||||||
<input
|
<input
|
||||||
@@ -537,8 +536,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
|
|||||||
/>
|
/>
|
||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
}
|
})}
|
||||||
)}
|
|
||||||
|
|
||||||
<ActionButton
|
<ActionButton
|
||||||
iconProps={{ iconName: "Add" }}
|
iconProps={{ iconName: "Add" }}
|
||||||
|
|||||||
174
src/Explorer/Panes/AddDatabasePane.html
Normal file
174
src/Explorer/Panes/AddDatabasePane.html
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
<div data-bind="visible: visible, event: { keydown: onPaneKeyDown }">
|
||||||
|
<div class="contextual-pane-out" data-bind="click: cancel, clickBubble: false"></div>
|
||||||
|
<div class="contextual-pane" data-bind="attr: { id: id }">
|
||||||
|
<!-- Add database form -- Start -->
|
||||||
|
<div class="contextual-pane-in">
|
||||||
|
<form data-bind="submit: submit" style="height: 100%">
|
||||||
|
<div
|
||||||
|
class="paneContentContainer"
|
||||||
|
role="dialog"
|
||||||
|
aria-labelledby="databaseTitle"
|
||||||
|
data-bind="template: { name: 'add-database-inputs' }"
|
||||||
|
></div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<!-- Add database form -- End -->
|
||||||
|
<!-- Loader - Start -->
|
||||||
|
<div class="dataExplorerLoaderContainer dataExplorerPaneLoaderContainer" data-bind="visible: isExecuting">
|
||||||
|
<img class="dataExplorerLoader" src="/images/LoadingIndicator_3Squares.gif" />
|
||||||
|
</div>
|
||||||
|
<!-- Loader - End -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/html" id="add-database-inputs">
|
||||||
|
<!-- Add database header - Start -->
|
||||||
|
<div class="firstdivbg headerline">
|
||||||
|
<span id="databaseTitle" role="heading" aria-level="2" data-bind="text: title"></span>
|
||||||
|
<div
|
||||||
|
class="closeImg"
|
||||||
|
role="button"
|
||||||
|
aria-label="Close pane"
|
||||||
|
data-bind="click: cancel, event: { keypress: onCloseKeyPress }"
|
||||||
|
tabindex="0"
|
||||||
|
>
|
||||||
|
<img src="/images/close-black.svg" title="Close" alt="Close" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Add database header - End -->
|
||||||
|
|
||||||
|
<!-- Add database errors - Start -->
|
||||||
|
<div class="warningErrorContainer" aria-live="assertive" data-bind="visible: formErrors() && formErrors() !== ''">
|
||||||
|
<div class="warningErrorContent">
|
||||||
|
<span><img class="paneErrorIcon" src="/images/error_red.svg" alt="Error" /></span>
|
||||||
|
<span class="warningErrorDetailsLinkContainer">
|
||||||
|
<span class="formErrors" data-bind="text: formErrors, attr: { title: formErrors }"></span>
|
||||||
|
<a
|
||||||
|
class="errorLink"
|
||||||
|
role="link"
|
||||||
|
data-bind="visible: formErrorsDetails() && formErrorsDetails() !== '', click: showErrorDetails, event: { keypress: onMoreDetailsKeyPress }"
|
||||||
|
tabindex="0"
|
||||||
|
>
|
||||||
|
More details</a
|
||||||
|
>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Add database errors - End -->
|
||||||
|
|
||||||
|
<!-- upsell message - start -->
|
||||||
|
<div
|
||||||
|
class="infoBoxContainer"
|
||||||
|
aria-live="assertive"
|
||||||
|
data-bind="visible: showUpsellMessage && showUpsellMessage() && formErrors && !formErrors()"
|
||||||
|
>
|
||||||
|
<div class="infoBoxContent">
|
||||||
|
<span><img class="infoBoxIcon" src="/images/info_color.svg" alt="Promo" /></span>
|
||||||
|
<span class="infoBoxDetails">
|
||||||
|
<span class="infoBoxMessage" data-bind="text: upsellMessage, attr: { title: upsellMessage }"></span>
|
||||||
|
<a
|
||||||
|
class="underlinedLink"
|
||||||
|
id="linkAddDatabase"
|
||||||
|
data-bind="text: upsellAnchorText, attr: { 'href': upsellAnchorUrl, 'aria-label': upsellMessageAriaLabel }"
|
||||||
|
target="_blank"
|
||||||
|
href=""
|
||||||
|
tabindex="0"
|
||||||
|
></a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- upsell message - end -->
|
||||||
|
|
||||||
|
<!-- Add database inputs - Start -->
|
||||||
|
<div class="paneMainContent">
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
<span class="mandatoryStar">*</span>
|
||||||
|
<span data-bind="text: databaseIdLabel"></span>
|
||||||
|
<span class="infoTooltip" role="tooltip" tabindex="0">
|
||||||
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
|
<span class="tooltiptext infoTooltipWidth" data-bind="text: databaseIdTooltipText"></span>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id="database-id"
|
||||||
|
type="text"
|
||||||
|
aria-required="true"
|
||||||
|
autocomplete="off"
|
||||||
|
pattern="[^/?#\\]*[^/?# \\]"
|
||||||
|
title="May not end with space nor contain characters '\' '/' '#' '?'"
|
||||||
|
size="40"
|
||||||
|
class="collid"
|
||||||
|
data-bind="textInput: databaseId, hasFocus: firstFieldHasFocus, attr: { 'aria-label': databaseIdLabel, 'placeholder': databaseIdPlaceHolder }"
|
||||||
|
autofocus
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- Database provisioned throughput - Start -->
|
||||||
|
<!-- ko if: canConfigureThroughput -->
|
||||||
|
<div class="databaseProvision" aria-label="New database provision support">
|
||||||
|
<input
|
||||||
|
tabindex="0"
|
||||||
|
type="checkbox"
|
||||||
|
id="addDatabasePane-databaseSharedThroughput"
|
||||||
|
title="Provision shared throughput"
|
||||||
|
data-bind="checked: databaseCreateNewShared"
|
||||||
|
/>
|
||||||
|
<span class="databaseProvisionText" for="databaseSharedThroughput">Provision throughput</span>
|
||||||
|
<span class="infoTooltip" role="tooltip" tabindex="0">
|
||||||
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
|
<span
|
||||||
|
class="tooltiptext provisionDatabaseThroughput"
|
||||||
|
data-bind="text: databaseLevelThroughputTooltipText"
|
||||||
|
></span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div data-bind="visible: databaseCreateNewShared">
|
||||||
|
<throughput-input-autopilot-v3
|
||||||
|
params="{
|
||||||
|
step: 100,
|
||||||
|
value: throughput,
|
||||||
|
testId: 'sharedThroughputValue',
|
||||||
|
minimum: minThroughputRU,
|
||||||
|
maximum: maxThroughputRU,
|
||||||
|
isEnabled: databaseCreateNewShared,
|
||||||
|
label: throughputRangeText,
|
||||||
|
ariaLabel: throughputRangeText,
|
||||||
|
costsVisible: costsVisible,
|
||||||
|
requestUnitsUsageCost: requestUnitsUsageCost,
|
||||||
|
spendAckChecked: throughputSpendAck,
|
||||||
|
spendAckId: 'throughputSpendAckDatabase',
|
||||||
|
spendAckText: throughputSpendAckText,
|
||||||
|
spendAckVisible: throughputSpendAckVisible,
|
||||||
|
showAsMandatory: true,
|
||||||
|
infoBubbleText: ruToolTipText,
|
||||||
|
throughputAutoPilotRadioId: 'newDatabase-databaseThroughput-autoPilotRadio',
|
||||||
|
throughputProvisionedRadioId: 'newDatabase-databaseThroughput-manualRadio',
|
||||||
|
throughputModeRadioName: 'throughputModeRadioName',
|
||||||
|
isAutoPilotSelected: isAutoPilotSelected,
|
||||||
|
maxAutoPilotThroughputSet: maxAutoPilotThroughputSet,
|
||||||
|
autoPilotUsageCost: autoPilotUsageCost,
|
||||||
|
canExceedMaximumValue: canExceedMaximumValue,
|
||||||
|
freeTierExceedThroughputTooltip: freeTierExceedThroughputTooltip
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
</throughput-input-autopilot-v3>
|
||||||
|
<p data-bind="visible: canRequestSupport">
|
||||||
|
<!-- TODO: Replace link with call to the Azure Support blade --><a
|
||||||
|
href="https://aka.ms/cosmosdbfeedback?subject=Cosmos%20DB%20More%20Throughput%20Request"
|
||||||
|
>Contact support</a
|
||||||
|
>
|
||||||
|
for more than <span data-bind="text: maxThroughputRUText"></span> RU/s.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<!-- /ko -->
|
||||||
|
<!-- Database provisioned throughput - End -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paneFooter">
|
||||||
|
<div class="leftpanel-okbut">
|
||||||
|
<input type="submit" value="OK" class="btncreatecoll1" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Add database inputs - End -->
|
||||||
|
</script>
|
||||||
273
src/Explorer/Panes/CassandraAddCollectionPane.html
Normal file
273
src/Explorer/Panes/CassandraAddCollectionPane.html
Normal file
@@ -0,0 +1,273 @@
|
|||||||
|
<div data-bind="visible: visible, event: { keydown: onPaneKeyDown }">
|
||||||
|
<div
|
||||||
|
class="contextual-pane-out"
|
||||||
|
data-bind="
|
||||||
|
click: cancel,
|
||||||
|
clickBubble: false"
|
||||||
|
></div>
|
||||||
|
<div class="contextual-pane" id="cassandraaddcollectionpane">
|
||||||
|
<!-- Add Cassandra collection form - Start -->
|
||||||
|
<div class="contextual-pane-in">
|
||||||
|
<form
|
||||||
|
class="paneContentContainer"
|
||||||
|
role="dialog"
|
||||||
|
aria-label="Add Table"
|
||||||
|
data-bind="
|
||||||
|
submit: submit"
|
||||||
|
>
|
||||||
|
<!-- Add Cassandra collection header - Start -->
|
||||||
|
<div class="firstdivbg headerline">
|
||||||
|
<span role="heading" aria-level="2" data-bind="text: title"></span>
|
||||||
|
<div
|
||||||
|
class="closeImg"
|
||||||
|
role="button"
|
||||||
|
aria-label="Close pane"
|
||||||
|
tabindex="0"
|
||||||
|
data-bind="
|
||||||
|
click: cancel, event: { keypress: onCloseKeyPress }"
|
||||||
|
>
|
||||||
|
<img src="/images/close-black.svg" title="Close" alt="Close" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Add Cassandra collection header - End -->
|
||||||
|
<!-- Add Cassandra collection errors - Start -->
|
||||||
|
<div
|
||||||
|
class="warningErrorContainer"
|
||||||
|
aria-live="assertive"
|
||||||
|
data-bind="visible: formErrors() && formErrors() !== ''"
|
||||||
|
>
|
||||||
|
<div class="warningErrorContent">
|
||||||
|
<span><img class="paneErrorIcon" src="/images/error_red.svg" alt="Error" /></span>
|
||||||
|
<span class="warningErrorDetailsLinkContainer">
|
||||||
|
<span class="formErrors" data-bind="text: formErrors, attr: { title: formErrors }"></span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Add Cassandra collection errors - End -->
|
||||||
|
<div class="paneMainContent">
|
||||||
|
<div class="seconddivpadding">
|
||||||
|
<p>
|
||||||
|
<span class="mandatoryStar">*</span> Keyspace name
|
||||||
|
<span class="infoTooltip" role="tooltip" tabindex="0">
|
||||||
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
|
<span class="tooltiptext infoTooltipWidth"
|
||||||
|
>Select an existing keyspace or enter a new keyspace id.</span
|
||||||
|
>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="createNewDatabaseOrUseExisting">
|
||||||
|
<input
|
||||||
|
class="createNewDatabaseOrUseExistingRadio"
|
||||||
|
aria-label="Create new keyspace"
|
||||||
|
name="databaseType"
|
||||||
|
type="radio"
|
||||||
|
role="radio"
|
||||||
|
id="keyspaceCreateNew"
|
||||||
|
data-test="addCollection-newDatabase"
|
||||||
|
tabindex="0"
|
||||||
|
data-bind="checked: keyspaceCreateNew, checkedValue: true, attr: { 'aria-checked': keyspaceCreateNew() ? 'true' : 'false' }"
|
||||||
|
/>
|
||||||
|
<span class="createNewDatabaseOrUseExistingSpace" for="keyspaceCreateNew">Create new</span>
|
||||||
|
|
||||||
|
<input
|
||||||
|
class="createNewDatabaseOrUseExistingRadio"
|
||||||
|
aria-label="Use existing keyspace"
|
||||||
|
name="databaseType"
|
||||||
|
type="radio"
|
||||||
|
role="radio"
|
||||||
|
id="keyspaceUseExisting"
|
||||||
|
data-test="addCollection-existingDatabase"
|
||||||
|
tabindex="0"
|
||||||
|
data-bind="checked: keyspaceCreateNew, checkedValue: false, attr: { 'aria-checked': !keyspaceCreateNew() ? 'true' : 'false' }"
|
||||||
|
/>
|
||||||
|
<span class="createNewDatabaseOrUseExistingSpace" for="keyspaceUseExisting">Use existing</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id="keyspace-id"
|
||||||
|
data-test="addCollection-keyspaceId"
|
||||||
|
type="text"
|
||||||
|
autocomplete="off"
|
||||||
|
pattern="[^/?#\\]*[^/?# \\]"
|
||||||
|
title="May not end with space nor contain characters '\' '/' '#' '?'"
|
||||||
|
placeholder="Type a new keyspace id"
|
||||||
|
size="40"
|
||||||
|
class="collid"
|
||||||
|
data-bind="visible: keyspaceCreateNew, textInput: keyspaceId, hasFocus: firstFieldHasFocus"
|
||||||
|
aria-label="Keyspace id"
|
||||||
|
aria-required="true"
|
||||||
|
autofocus
|
||||||
|
/>
|
||||||
|
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
aria-required="true"
|
||||||
|
autocomplete="off"
|
||||||
|
pattern="[^/?#\\]*[^/?# \\]"
|
||||||
|
title="May not end with space nor contain characters '\' '/' '#' '?'"
|
||||||
|
list="keyspacesList"
|
||||||
|
placeholder="Choose existing keyspace id"
|
||||||
|
size="40"
|
||||||
|
class="collid"
|
||||||
|
data-bind="visible: !keyspaceCreateNew(), textInput: keyspaceId, hasFocus: firstFieldHasFocus"
|
||||||
|
aria-label="Keyspace id"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<datalist id="keyspacesList" data-bind="foreach: container.databases">
|
||||||
|
<option data-bind="value: $data.id"></option>
|
||||||
|
</datalist>
|
||||||
|
|
||||||
|
<!-- Database provisioned throughput - Start -->
|
||||||
|
<!-- ko if: canConfigureThroughput -->
|
||||||
|
<div
|
||||||
|
class="databaseProvision"
|
||||||
|
aria-label="New database provision support"
|
||||||
|
data-bind="visible: keyspaceCreateNew"
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
tabindex="0"
|
||||||
|
type="checkbox"
|
||||||
|
id="keyspaceSharedThroughput"
|
||||||
|
title="Provision shared throughput"
|
||||||
|
data-bind="checked: keyspaceHasSharedOffer"
|
||||||
|
/>
|
||||||
|
<span class="databaseProvisionText" for="keyspaceSharedThroughput">Provision keyspace throughput</span>
|
||||||
|
<span class="infoTooltip" role="tooltip" tabindex="0">
|
||||||
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
|
<span class="tooltiptext provisionDatabaseThroughput"
|
||||||
|
>Provisioned throughput at the keyspace level will be shared across unlimited number of tables within
|
||||||
|
the keyspace</span
|
||||||
|
>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<!-- 1 -->
|
||||||
|
<div data-bind="visible: keyspaceCreateNew() && keyspaceHasSharedOffer()">
|
||||||
|
<throughput-input-autopilot-v3
|
||||||
|
params="{
|
||||||
|
testId: 'cassandraThroughputValue-v3-shared',
|
||||||
|
value: keyspaceThroughput,
|
||||||
|
minimum: minThroughputRU,
|
||||||
|
maximum: maxThroughputRU,
|
||||||
|
isEnabled: keyspaceCreateNew() && keyspaceHasSharedOffer(),
|
||||||
|
label: sharedThroughputRangeText,
|
||||||
|
ariaLabel: sharedThroughputRangeText,
|
||||||
|
requestUnitsUsageCost: requestUnitsUsageCostShared,
|
||||||
|
spendAckChecked: sharedThroughputSpendAck,
|
||||||
|
spendAckId: 'sharedThroughputSpendAck-v3-shared',
|
||||||
|
spendAckText: sharedThroughputSpendAckText,
|
||||||
|
spendAckVisible: sharedThroughputSpendAckVisible,
|
||||||
|
showAsMandatory: true,
|
||||||
|
infoBubbleText: ruToolTipText,
|
||||||
|
throughputAutoPilotRadioId: 'newKeyspace-databaseThroughput-autoPilotRadio-v3-shared',
|
||||||
|
throughputProvisionedRadioId: 'newKeyspace-databaseThroughput-manualRadio-v3-shared',
|
||||||
|
isAutoPilotSelected: isSharedAutoPilotSelected,
|
||||||
|
maxAutoPilotThroughputSet: sharedAutoPilotThroughput,
|
||||||
|
autoPilotUsageCost: autoPilotUsageCost,
|
||||||
|
canExceedMaximumValue: canExceedMaximumValue,
|
||||||
|
costsVisible: costsVisible,
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
</throughput-input-autopilot-v3>
|
||||||
|
</div>
|
||||||
|
<!-- /ko -->
|
||||||
|
<!-- Database provisioned throughput - End -->
|
||||||
|
</div>
|
||||||
|
<div class="seconddivpadding">
|
||||||
|
<p>
|
||||||
|
<span class="mandatoryStar">*</span> Enter CQL command to create the table.
|
||||||
|
<a href="https://aka.ms/cassandra-create-table" target="_blank">Learn More</a>
|
||||||
|
</p>
|
||||||
|
<div data-bind="text: createTableQuery" style="float: left; padding-top: 3px; padding-right: 3px"></div>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
data-test="addCollection-tableId"
|
||||||
|
aria-required="true"
|
||||||
|
autocomplete="off"
|
||||||
|
pattern="[^/?#\\]*[^/?# \\]"
|
||||||
|
title="May not end with space nor contain characters '\' '/' '#' '?'"
|
||||||
|
data-test="addCollection-tableId"
|
||||||
|
placeholder="Enter tableId"
|
||||||
|
size="20"
|
||||||
|
class="textfontclr"
|
||||||
|
data-bind="value: tableId"
|
||||||
|
style="margin-bottom: 5px"
|
||||||
|
/>
|
||||||
|
<textarea
|
||||||
|
id="editor-area"
|
||||||
|
rows="15"
|
||||||
|
aria-label="Table Schema"
|
||||||
|
data-bind="value: userTableQuery"
|
||||||
|
style="height: 125px; width: calc(100% - 80px); resize: vertical"
|
||||||
|
></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Provision table throughput - start -->
|
||||||
|
<!-- ko if: canConfigureThroughput -->
|
||||||
|
<div class="seconddivpadding" data-bind="visible: keyspaceHasSharedOffer() && !keyspaceCreateNew()">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
id="tableSharedThroughput"
|
||||||
|
title="Provision dedicated throughput for this table"
|
||||||
|
data-bind="checked: dedicateTableThroughput"
|
||||||
|
/>
|
||||||
|
<span for="tableSharedThroughput">Provision dedicated throughput for this table</span>
|
||||||
|
<span class="leftAlignInfoTooltip" role="tooltip" tabindex="0">
|
||||||
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
|
<span class="tooltiptext sharedCollectionThroughputTooltipWidth"
|
||||||
|
>You can optionally provision dedicated throughput for a table within a keyspace that has throughput
|
||||||
|
provisioned. This dedicated throughput amount will not be shared with other tables in the keyspace and
|
||||||
|
does not count towards the throughput you provisioned for the keyspace. This throughput amount will be
|
||||||
|
billed in addition to the throughput amount you provisioned at the keyspace level.</span
|
||||||
|
>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<!-- 2 -->
|
||||||
|
<div data-bind="visible: !keyspaceHasSharedOffer() || dedicateTableThroughput()">
|
||||||
|
<throughput-input-autopilot-v3
|
||||||
|
params="{
|
||||||
|
testId: 'cassandraSharedThroughputValue-v3-dedicated',
|
||||||
|
value: throughput,
|
||||||
|
minimum: minThroughputRU,
|
||||||
|
maximum: maxThroughputRU,
|
||||||
|
isEnabled: !keyspaceHasSharedOffer() || dedicateTableThroughput(),
|
||||||
|
label: throughputRangeText,
|
||||||
|
ariaLabel: throughputRangeText,
|
||||||
|
costsVisible: costsVisible,
|
||||||
|
requestUnitsUsageCost: requestUnitsUsageCostDedicated,
|
||||||
|
spendAckChecked: throughputSpendAck,
|
||||||
|
spendAckId: 'throughputSpendAckCassandra-v3-dedicated',
|
||||||
|
spendAckText: throughputSpendAckText,
|
||||||
|
spendAckVisible: throughputSpendAckVisible,
|
||||||
|
showAsMandatory: true,
|
||||||
|
infoBubbleText: ruToolTipText,
|
||||||
|
throughputAutoPilotRadioId: 'newKeyspace-containerThroughput-autoPilotRadio-v3-dedicated',
|
||||||
|
throughputProvisionedRadioId: 'newKeyspace-containerThroughput-manualRadio-v3-dedicated',
|
||||||
|
isAutoPilotSelected: isAutoPilotSelected,
|
||||||
|
maxAutoPilotThroughputSet: selectedAutoPilotThroughput,
|
||||||
|
autoPilotUsageCost: autoPilotUsageCost,
|
||||||
|
canExceedMaximumValue: canExceedMaximumValue,
|
||||||
|
overrideWithAutoPilotSettings: false,
|
||||||
|
overrideWithProvisionedThroughputSettings: false
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
</throughput-input-autopilot-v3>
|
||||||
|
</div>
|
||||||
|
<!-- /ko -->
|
||||||
|
<!-- Provision table throughput - end -->
|
||||||
|
</div>
|
||||||
|
<div class="paneFooter">
|
||||||
|
<div class="leftpanel-okbut">
|
||||||
|
<input type="submit" data-test="addCollection-createCollection" value="OK" class="btncreatecoll1" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<!-- Add Cassandra collection form - End -->
|
||||||
|
<!-- Loader - Start -->
|
||||||
|
<div class="dataExplorerLoaderContainer dataExplorerPaneLoaderContainer" data-bind="visible: isExecuting">
|
||||||
|
<img class="dataExplorerLoader" src="/images/LoadingIndicator_3Squares.gif" alt="loading indicator" />
|
||||||
|
</div>
|
||||||
|
<!-- Loader - End -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { IDropdownOption, IImageProps, Image, Stack, Text } from "@fluentui/react";
|
import { IDropdownOption, IImageProps, Image, Stack, Text } from "@fluentui/react";
|
||||||
import { useBoolean } from "@fluentui/react-hooks";
|
import { useBoolean } from "@fluentui/react-hooks";
|
||||||
|
import AddPropertyIcon from "images/Add-property.svg";
|
||||||
import React, { FunctionComponent, useState } from "react";
|
import React, { FunctionComponent, useState } from "react";
|
||||||
import AddPropertyIcon from "../../../../images/Add-property.svg";
|
|
||||||
import { logConsoleError } from "../../../Utils/NotificationConsoleUtils";
|
import { logConsoleError } from "../../../Utils/NotificationConsoleUtils";
|
||||||
import StoredProcedure from "../../Tree/StoredProcedure";
|
import StoredProcedure from "../../Tree/StoredProcedure";
|
||||||
import { RightPaneForm, RightPaneFormProps } from "../RightPaneForm/RightPaneForm";
|
import { RightPaneForm, RightPaneFormProps } from "../RightPaneForm/RightPaneForm";
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import AddPropertyIcon from "images/Add-property.svg";
|
||||||
|
import EntityCancelIcon from "images/Entity_cancel.svg";
|
||||||
import {
|
import {
|
||||||
Dropdown,
|
Dropdown,
|
||||||
IDropdownOption,
|
IDropdownOption,
|
||||||
@@ -9,8 +11,6 @@ import {
|
|||||||
TextField,
|
TextField,
|
||||||
} from "@fluentui/react";
|
} from "@fluentui/react";
|
||||||
import React, { FunctionComponent } from "react";
|
import React, { FunctionComponent } from "react";
|
||||||
import AddPropertyIcon from "../../../../images/Add-property.svg";
|
|
||||||
import EntityCancelIcon from "../../../../images/Entity_cancel.svg";
|
|
||||||
|
|
||||||
const dropdownStyles: Partial<IDropdownStyles> = { dropdown: { width: 100 } };
|
const dropdownStyles: Partial<IDropdownStyles> = { dropdown: { width: 100 } };
|
||||||
const options = [
|
const options = [
|
||||||
|
|||||||
@@ -0,0 +1,126 @@
|
|||||||
|
import { IconButton, PrimaryButton } from "@fluentui/react";
|
||||||
|
import ErrorRedIcon from "images/error_red.svg";
|
||||||
|
import LoadingIndicatorIcon from "images/LoadingIndicator_3Squares.gif";
|
||||||
|
import React, { FunctionComponent, ReactNode } from "react";
|
||||||
|
import { KeyCodes } from "../../../Common/Constants";
|
||||||
|
|
||||||
|
export interface GenericRightPaneProps {
|
||||||
|
expandConsole: () => void;
|
||||||
|
formError: string;
|
||||||
|
formErrorDetail: string;
|
||||||
|
id: string;
|
||||||
|
isExecuting: boolean;
|
||||||
|
onClose: () => void;
|
||||||
|
onSubmit: () => void;
|
||||||
|
submitButtonText: string;
|
||||||
|
title: string;
|
||||||
|
isSubmitButtonHidden?: boolean;
|
||||||
|
children?: ReactNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const GenericRightPaneComponent: FunctionComponent<GenericRightPaneProps> = ({
|
||||||
|
expandConsole,
|
||||||
|
formError,
|
||||||
|
formErrorDetail,
|
||||||
|
id,
|
||||||
|
isExecuting,
|
||||||
|
onClose,
|
||||||
|
onSubmit,
|
||||||
|
submitButtonText,
|
||||||
|
title,
|
||||||
|
isSubmitButtonHidden,
|
||||||
|
children,
|
||||||
|
}: GenericRightPaneProps) => {
|
||||||
|
const getPanelHeight = (): number => {
|
||||||
|
const notificationConsoleElement: HTMLElement = document.getElementById("explorerNotificationConsole");
|
||||||
|
return window.innerHeight - $(notificationConsoleElement).height();
|
||||||
|
};
|
||||||
|
|
||||||
|
const panelHeight: number = getPanelHeight();
|
||||||
|
|
||||||
|
const renderPanelHeader = (): JSX.Element => {
|
||||||
|
return (
|
||||||
|
<div className="firstdivbg headerline">
|
||||||
|
<span id="databaseTitle" role="heading" aria-level={2}>
|
||||||
|
{title}
|
||||||
|
</span>
|
||||||
|
<IconButton
|
||||||
|
ariaLabel="Close pane"
|
||||||
|
title="Close pane"
|
||||||
|
onClick={onClose}
|
||||||
|
tabIndex={0}
|
||||||
|
className="closePaneBtn"
|
||||||
|
iconProps={{ iconName: "Cancel" }}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const renderErrorSection = (): JSX.Element => {
|
||||||
|
return (
|
||||||
|
<div className="warningErrorContainer" aria-live="assertive" hidden={!formError}>
|
||||||
|
<div className="warningErrorContent">
|
||||||
|
<span>
|
||||||
|
<img className="paneErrorIcon" src={ErrorRedIcon} alt="Error" />
|
||||||
|
</span>
|
||||||
|
<span className="warningErrorDetailsLinkContainer">
|
||||||
|
<span className="formErrors" title={formError}>
|
||||||
|
{formError}
|
||||||
|
</span>
|
||||||
|
<a className="errorLink" role="link" hidden={!formErrorDetail} onClick={expandConsole}>
|
||||||
|
More details
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const renderPanelFooter = (): JSX.Element => {
|
||||||
|
return (
|
||||||
|
<div className="paneFooter">
|
||||||
|
<div className="leftpanel-okbut">
|
||||||
|
<PrimaryButton
|
||||||
|
style={{ visibility: isSubmitButtonHidden ? "hidden" : "visible" }}
|
||||||
|
ariaLabel="Submit"
|
||||||
|
title="Submit"
|
||||||
|
onClick={onSubmit}
|
||||||
|
tabIndex={0}
|
||||||
|
className="genericPaneSubmitBtn"
|
||||||
|
text={submitButtonText}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const renderLoadingScreen = (): JSX.Element => {
|
||||||
|
return (
|
||||||
|
<div className="dataExplorerLoaderContainer dataExplorerPaneLoaderContainer" hidden={!isExecuting}>
|
||||||
|
<img className="dataExplorerLoader" src={LoadingIndicatorIcon} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const onKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {
|
||||||
|
if (event.keyCode === KeyCodes.Escape) {
|
||||||
|
onClose();
|
||||||
|
event.stopPropagation();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div tabIndex={-1} onKeyDown={onKeyDown}>
|
||||||
|
<div className="contextual-pane-out" onClick={onClose}></div>
|
||||||
|
<div className="contextual-pane" id={id} style={{ height: panelHeight }} onKeyDown={onKeyDown}>
|
||||||
|
<div className="panelContentWrapper">
|
||||||
|
{renderPanelHeader()}
|
||||||
|
{renderErrorSection()}
|
||||||
|
{children}
|
||||||
|
{renderPanelFooter()}
|
||||||
|
</div>
|
||||||
|
{renderLoadingScreen()}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
59
src/Explorer/Panes/GraphStylingPane.html
Normal file
59
src/Explorer/Panes/GraphStylingPane.html
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
<div data-bind="visible: visible, event: { keydown: onPaneKeyDown }">
|
||||||
|
<div class="contextual-pane-out" data-bind="click: cancel, clickBubble: false"></div>
|
||||||
|
<div class="contextual-pane" data-bind="attr: { id: id }">
|
||||||
|
<!-- Graph Styling form - Start -->
|
||||||
|
<div class="contextual-pane-in">
|
||||||
|
<form class="paneContentContainer" data-bind="submit: submit">
|
||||||
|
<!-- Graph Styling header - Start -->
|
||||||
|
<div class="firstdivbg headerline">
|
||||||
|
<span role="heading" aria-level="2">Graph Styling</span>
|
||||||
|
<div
|
||||||
|
class="closeImg"
|
||||||
|
role="button"
|
||||||
|
aria-label="Close pane"
|
||||||
|
tabindex="0"
|
||||||
|
data-bind="click: cancel, event: { keypress: onCloseKeyPress }"
|
||||||
|
>
|
||||||
|
<img src="/images/close-black.svg" title="Close" alt="Close" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Graph Styling header - End -->
|
||||||
|
|
||||||
|
<!-- Graph Styling errors - Start -->
|
||||||
|
<div
|
||||||
|
aria-live="assertive"
|
||||||
|
class="warningErrorContainer"
|
||||||
|
data-bind="visible: formErrors() && formErrors() !== ''"
|
||||||
|
>
|
||||||
|
<div class="warningErrorContent">
|
||||||
|
<span><img class="paneErrorIcon" src="/images/error_red.svg" alt="Error" /></span>
|
||||||
|
<span class="warningErrorDetailsLinkContainer">
|
||||||
|
<span class="formErrors" data-bind="text: formErrors, attr: { title: formErrors }"></span>
|
||||||
|
<a
|
||||||
|
class="errorLink"
|
||||||
|
role="link"
|
||||||
|
data-bind="visible: formErrorsDetails() && formErrorsDetails() !== '' , click: showErrorDetails"
|
||||||
|
>
|
||||||
|
More details
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Graph Styling errors - End -->
|
||||||
|
|
||||||
|
<!-- Add graph configuration - Start -->
|
||||||
|
<div class="paneMainContent">
|
||||||
|
<graph-style
|
||||||
|
id="graphStyleComponent"
|
||||||
|
params="{ config:graphConfigUIData, firstFieldHasFocus: firstFieldHasFocus }"
|
||||||
|
></graph-style>
|
||||||
|
</div>
|
||||||
|
<div class="paneFooter">
|
||||||
|
<div class="leftpanel-okbut"><input type="submit" value="OK" class="btncreatecoll1" /></div>
|
||||||
|
</div>
|
||||||
|
<!-- Add Graph configuration - End -->
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<!-- Graph Styling form - End -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { IImageProps, Image, ImageFit, Stack, TextField } from "@fluentui/react";
|
import { IImageProps, Image, ImageFit, Stack, TextField } from "@fluentui/react";
|
||||||
import { useBoolean } from "@fluentui/react-hooks";
|
import { useBoolean } from "@fluentui/react-hooks";
|
||||||
|
import folderIcon from "images/folder_16x16.svg";
|
||||||
import React, { FunctionComponent, useState } from "react";
|
import React, { FunctionComponent, useState } from "react";
|
||||||
import folderIcon from "../../../../images/folder_16x16.svg";
|
|
||||||
import { logError } from "../../../Common/Logger";
|
import { logError } from "../../../Common/Logger";
|
||||||
import { Collection } from "../../../Contracts/ViewModels";
|
import { Collection } from "../../../Contracts/ViewModels";
|
||||||
import { userContext } from "../../../UserContext";
|
import { userContext } from "../../../UserContext";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
import LoadingIndicator_3Squares from "images/LoadingIndicator_3Squares.gif";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import LoadingIndicator_3Squares from "../../../images/LoadingIndicator_3Squares.gif";
|
|
||||||
|
|
||||||
export const PanelLoadingScreen: React.FunctionComponent = () => (
|
export const PanelLoadingScreen: React.FunctionComponent = () => (
|
||||||
<div className="dataExplorerLoaderContainer dataExplorerPaneLoaderContainer">
|
<div className="dataExplorerLoaderContainer dataExplorerPaneLoaderContainer">
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
|
import { DatabaseAccount } from "Contracts/DataModels";
|
||||||
import { shallow } from "enzyme";
|
import { shallow } from "enzyme";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { DatabaseAccount } from "../../../Contracts/DataModels";
|
import { updateUserContext } from "UserContext";
|
||||||
import { updateUserContext } from "../../../UserContext";
|
|
||||||
import { SettingsPane } from "./SettingsPane";
|
import { SettingsPane } from "./SettingsPane";
|
||||||
|
|
||||||
const props = {
|
const props = {
|
||||||
expandConsole: (): void => undefined,
|
expandConsole: (): void => undefined,
|
||||||
closePanel: (): void => undefined,
|
closePanel: (): void => undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
describe("Settings Pane", () => {
|
describe("Settings Pane", () => {
|
||||||
it("should render Default properly", () => {
|
it("should render Default properly", () => {
|
||||||
const wrapper = shallow(<SettingsPane {...props} />);
|
const wrapper = shallow(<SettingsPane {...props} />);
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { Checkbox, ChoiceGroup, IChoiceGroupOption, SpinButton } from "@fluentui/react";
|
import { Checkbox, ChoiceGroup, IChoiceGroupOption, SpinButton } from "@fluentui/react";
|
||||||
|
import * as Constants from "Common/Constants";
|
||||||
|
import { configContext } from "ConfigContext";
|
||||||
import React, { FunctionComponent, MouseEvent, useState } from "react";
|
import React, { FunctionComponent, MouseEvent, useState } from "react";
|
||||||
import * as Constants from "../../../Common/Constants";
|
|
||||||
import { InfoTooltip } from "../../../Common/Tooltip/InfoTooltip";
|
import { InfoTooltip } from "../../../Common/Tooltip/InfoTooltip";
|
||||||
import { configContext } from "../../../ConfigContext";
|
|
||||||
import { LocalStorageUtility, StorageKey } from "../../../Shared/StorageUtility";
|
import { LocalStorageUtility, StorageKey } from "../../../Shared/StorageUtility";
|
||||||
import * as StringUtility from "../../../Shared/StringUtility";
|
import * as StringUtility from "../../../Shared/StringUtility";
|
||||||
import { userContext } from "../../../UserContext";
|
import { userContext } from "../../../UserContext";
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { IDropdownOption, Image, IPanelProps, IRenderFunction, Label, Stack, Text, TextField } from "@fluentui/react";
|
import { IDropdownOption, Image, IPanelProps, IRenderFunction, Label, Stack, Text, TextField } from "@fluentui/react";
|
||||||
import { useBoolean } from "@fluentui/react-hooks";
|
import { useBoolean } from "@fluentui/react-hooks";
|
||||||
|
import AddPropertyIcon from "images/Add-property.svg";
|
||||||
|
import RevertBackIcon from "images/RevertBack.svg";
|
||||||
import React, { FunctionComponent, useEffect, useState } from "react";
|
import React, { FunctionComponent, useEffect, useState } from "react";
|
||||||
import * as _ from "underscore";
|
import * as _ from "underscore";
|
||||||
import AddPropertyIcon from "../../../../images/Add-property.svg";
|
|
||||||
import RevertBackIcon from "../../../../images/RevertBack.svg";
|
|
||||||
import { TableEntity } from "../../../Common/TableEntity";
|
import { TableEntity } from "../../../Common/TableEntity";
|
||||||
import { userContext } from "../../../UserContext";
|
import { userContext } from "../../../UserContext";
|
||||||
import Explorer from "../../Explorer";
|
import Explorer from "../../Explorer";
|
||||||
@@ -67,10 +67,8 @@ export const AddTableEntityPanel: FunctionComponent<AddTableEntityPanelProps> =
|
|||||||
const [selectedRow, setSelectedRow] = useState<number>(0);
|
const [selectedRow, setSelectedRow] = useState<number>(0);
|
||||||
const [entityAttributeValue, setEntityAttributeValue] = useState<string>("");
|
const [entityAttributeValue, setEntityAttributeValue] = useState<string>("");
|
||||||
const [entityAttributeProperty, setEntityAttributeProperty] = useState<string>("");
|
const [entityAttributeProperty, setEntityAttributeProperty] = useState<string>("");
|
||||||
const [
|
const [isEntityValuePanelOpen, { setTrue: setIsEntityValuePanelTrue, setFalse: setIsEntityValuePanelFalse }] =
|
||||||
isEntityValuePanelOpen,
|
useBoolean(false);
|
||||||
{ setTrue: setIsEntityValuePanelTrue, setFalse: setIsEntityValuePanelFalse },
|
|
||||||
] = useBoolean(false);
|
|
||||||
|
|
||||||
/* Get default and previous saved entity headers */
|
/* Get default and previous saved entity headers */
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { IDropdownOption, Image, IPanelProps, IRenderFunction, Label, Stack, Text, TextField } from "@fluentui/react";
|
import { IDropdownOption, Image, IPanelProps, IRenderFunction, Label, Stack, Text, TextField } from "@fluentui/react";
|
||||||
import { useBoolean } from "@fluentui/react-hooks";
|
import { useBoolean } from "@fluentui/react-hooks";
|
||||||
|
import AddPropertyIcon from "images/Add-property.svg";
|
||||||
|
import RevertBackIcon from "images/RevertBack.svg";
|
||||||
import React, { FunctionComponent, useEffect, useState } from "react";
|
import React, { FunctionComponent, useEffect, useState } from "react";
|
||||||
import * as _ from "underscore";
|
import * as _ from "underscore";
|
||||||
import AddPropertyIcon from "../../../../images/Add-property.svg";
|
|
||||||
import RevertBackIcon from "../../../../images/RevertBack.svg";
|
|
||||||
import { TableEntity } from "../../../Common/TableEntity";
|
import { TableEntity } from "../../../Common/TableEntity";
|
||||||
import { userContext } from "../../../UserContext";
|
import { userContext } from "../../../UserContext";
|
||||||
import Explorer from "../../Explorer";
|
import Explorer from "../../Explorer";
|
||||||
@@ -67,10 +67,8 @@ export const EditTableEntityPanel: FunctionComponent<EditTableEntityPanelProps>
|
|||||||
const [originalDocument, setOriginalDocument] = useState<Entities.ITableEntity>({});
|
const [originalDocument, setOriginalDocument] = useState<Entities.ITableEntity>({});
|
||||||
const [entityAttributeProperty, setEntityAttributeProperty] = useState<string>("");
|
const [entityAttributeProperty, setEntityAttributeProperty] = useState<string>("");
|
||||||
|
|
||||||
const [
|
const [isEntityValuePanelOpen, { setTrue: setIsEntityValuePanelTrue, setFalse: setIsEntityValuePanelFalse }] =
|
||||||
isEntityValuePanelOpen,
|
useBoolean(false);
|
||||||
{ setTrue: setIsEntityValuePanelTrue, setFalse: setIsEntityValuePanelFalse },
|
|
||||||
] = useBoolean(false);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
@@ -111,7 +109,7 @@ export const EditTableEntityPanel: FunctionComponent<EditTableEntityPanelProps>
|
|||||||
const nonEditableType: boolean =
|
const nonEditableType: boolean =
|
||||||
entityAttributeType === TableConstants.CassandraType.Blob ||
|
entityAttributeType === TableConstants.CassandraType.Blob ||
|
||||||
entityAttributeType === TableConstants.CassandraType.Inet;
|
entityAttributeType === TableConstants.CassandraType.Inet;
|
||||||
const isDisable = !_.contains<string>(cassandraKeys, key) && !nonEditableType;
|
const isDisable = !_.contains<string>(cassandraKeys[0], key) && !nonEditableType;
|
||||||
const time =
|
const time =
|
||||||
entityAttributeType === TableConstants.TableType.DateTime ? getFormattedTime(displayValue) : "";
|
entityAttributeType === TableConstants.TableType.DateTime ? getFormattedTime(displayValue) : "";
|
||||||
displayedAttributes.push({
|
displayedAttributes.push({
|
||||||
|
|||||||
@@ -19,21 +19,8 @@ export const options = [
|
|||||||
{ key: Int64, text: Int64 },
|
{ key: Int64, text: Int64 },
|
||||||
];
|
];
|
||||||
|
|
||||||
const {
|
const { Text, Ascii, Bigint, Blob, Decimal, Float, Int, Uuid, Varchar, Varint, Inet, Smallint, Tinyint } =
|
||||||
Text,
|
TableConstants.CassandraType;
|
||||||
Ascii,
|
|
||||||
Bigint,
|
|
||||||
Blob,
|
|
||||||
Decimal,
|
|
||||||
Float,
|
|
||||||
Int,
|
|
||||||
Uuid,
|
|
||||||
Varchar,
|
|
||||||
Varint,
|
|
||||||
Inet,
|
|
||||||
Smallint,
|
|
||||||
Tinyint,
|
|
||||||
} = TableConstants.CassandraType;
|
|
||||||
export const cassandraOptions = [
|
export const cassandraOptions = [
|
||||||
{ key: Text, text: Text },
|
{ key: Text, text: Text },
|
||||||
{ key: Ascii, text: Ascii },
|
{ key: Ascii, text: Ascii },
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
import { Upload } from "Common/Upload/Upload";
|
||||||
import React, { ChangeEvent, FunctionComponent, useState } from "react";
|
import React, { ChangeEvent, FunctionComponent, useState } from "react";
|
||||||
import { Upload } from "../../../Common/Upload/Upload";
|
import { logConsoleError, logConsoleInfo, logConsoleProgress } from "Utils/NotificationConsoleUtils";
|
||||||
import { logConsoleError, logConsoleInfo, logConsoleProgress } from "../../../Utils/NotificationConsoleUtils";
|
|
||||||
import { NotebookContentItem } from "../../Notebook/NotebookContentItem";
|
import { NotebookContentItem } from "../../Notebook/NotebookContentItem";
|
||||||
import { RightPaneForm, RightPaneFormProps } from "../RightPaneForm/RightPaneForm";
|
import { RightPaneForm, RightPaneFormProps } from "../RightPaneForm/RightPaneForm";
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { DetailsList, DetailsListLayoutMode, IColumn, SelectionMode } from "@fluentui/react";
|
import { DetailsList, DetailsListLayoutMode, IColumn, SelectionMode } from "@fluentui/react";
|
||||||
|
import { Upload } from "Common/Upload/Upload";
|
||||||
|
import { UploadDetailsRecord } from "Contracts/ViewModels";
|
||||||
import React, { ChangeEvent, FunctionComponent, useState } from "react";
|
import React, { ChangeEvent, FunctionComponent, useState } from "react";
|
||||||
import { Upload } from "../../../Common/Upload/Upload";
|
import { logConsoleError } from "Utils/NotificationConsoleUtils";
|
||||||
import { UploadDetailsRecord } from "../../../Contracts/ViewModels";
|
|
||||||
import { logConsoleError } from "../../../Utils/NotificationConsoleUtils";
|
|
||||||
import Explorer from "../../Explorer";
|
import Explorer from "../../Explorer";
|
||||||
import { getErrorMessage } from "../../Tables/Utilities";
|
import { getErrorMessage } from "../../Tables/Utilities";
|
||||||
import { RightPaneForm, RightPaneFormProps } from "../RightPaneForm/RightPaneForm";
|
import { RightPaneForm, RightPaneFormProps } from "../RightPaneForm/RightPaneForm";
|
||||||
|
|||||||
@@ -2,17 +2,17 @@
|
|||||||
* Accordion top class
|
* Accordion top class
|
||||||
*/
|
*/
|
||||||
import { Link } from "@fluentui/react";
|
import { Link } from "@fluentui/react";
|
||||||
|
import AddDatabaseIcon from "images/AddDatabase.svg";
|
||||||
|
import NewQueryIcon from "images/AddSqlQuery_16x16.svg";
|
||||||
|
import NewStoredProcedureIcon from "images/AddStoredProcedure.svg";
|
||||||
|
import OpenQueryIcon from "images/BrowseQuery.svg";
|
||||||
|
import NewContainerIcon from "images/Hero-new-container.svg";
|
||||||
|
import NewNotebookIcon from "images/Hero-new-notebook.svg";
|
||||||
|
import SampleIcon from "images/Hero-sample.svg";
|
||||||
|
import NotebookIcon from "images/notebook/Notebook-resource.svg";
|
||||||
|
import ScaleAndSettingsIcon from "images/Scale_15x15.svg";
|
||||||
|
import CollectionIcon from "images/tree-collection.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import AddDatabaseIcon from "../../../images/AddDatabase.svg";
|
|
||||||
import NewQueryIcon from "../../../images/AddSqlQuery_16x16.svg";
|
|
||||||
import NewStoredProcedureIcon from "../../../images/AddStoredProcedure.svg";
|
|
||||||
import OpenQueryIcon from "../../../images/BrowseQuery.svg";
|
|
||||||
import NewContainerIcon from "../../../images/Hero-new-container.svg";
|
|
||||||
import NewNotebookIcon from "../../../images/Hero-new-notebook.svg";
|
|
||||||
import SampleIcon from "../../../images/Hero-sample.svg";
|
|
||||||
import NotebookIcon from "../../../images/notebook/Notebook-resource.svg";
|
|
||||||
import ScaleAndSettingsIcon from "../../../images/Scale_15x15.svg";
|
|
||||||
import CollectionIcon from "../../../images/tree-collection.svg";
|
|
||||||
import { AuthType } from "../../AuthType";
|
import { AuthType } from "../../AuthType";
|
||||||
import * as Constants from "../../Common/Constants";
|
import * as Constants from "../../Common/Constants";
|
||||||
import * as ViewModels from "../../Contracts/ViewModels";
|
import * as ViewModels from "../../Contracts/ViewModels";
|
||||||
|
|||||||
@@ -277,8 +277,9 @@ function updateTableScrollableRegionWidth(): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var bodyWidth = $(window).width();
|
var bodyWidth = $(window).width();
|
||||||
var dataTablesScrollBodyPosLeft = $(tabElement).find(Constants.htmlSelectors.dataTableScrollBodySelector).offset()
|
var dataTablesScrollBodyPosLeft = $(tabElement)
|
||||||
.left;
|
.find(Constants.htmlSelectors.dataTableScrollBodySelector)
|
||||||
|
.offset().left;
|
||||||
var scrollWidth = bodyWidth - dataTablesScrollBodyPosLeft;
|
var scrollWidth = bodyWidth - dataTablesScrollBodyPosLeft;
|
||||||
|
|
||||||
// jquery datatables automatically sets width:100% to both the header and the body when we use it's column autoWidth feature.
|
// jquery datatables automatically sets width:100% to both the header and the body when we use it's column autoWidth feature.
|
||||||
|
|||||||
@@ -172,8 +172,8 @@ export default class QueryClauseViewModel {
|
|||||||
} else {
|
} else {
|
||||||
this.resetFromTimestamp();
|
this.resetFromTimestamp();
|
||||||
if (userContext.apiType === "Cassandra") {
|
if (userContext.apiType === "Cassandra") {
|
||||||
const cassandraSchema = this._queryBuilderViewModel.tableEntityListViewModel.queryTablesTab.collection
|
const cassandraSchema =
|
||||||
.cassandraSchema;
|
this._queryBuilderViewModel.tableEntityListViewModel.queryTablesTab.collection.cassandraSchema;
|
||||||
for (let i = 0, len = cassandraSchema.length; i < len; i++) {
|
for (let i = 0, len = cassandraSchema.length; i < len; i++) {
|
||||||
if (cassandraSchema[i].property === this.field()) {
|
if (cassandraSchema[i].property === this.field()) {
|
||||||
this.type(cassandraSchema[i].type);
|
this.type(cassandraSchema[i].type);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<td class="refreshColHeader">
|
<td class="refreshColHeader">
|
||||||
<img
|
<img
|
||||||
class="refreshcol"
|
class="refreshcol"
|
||||||
src="/refresh-cosmos.svg"
|
src="/images/refresh-cosmos.svg"
|
||||||
data-bind="click: refreshDocumentsGrid"
|
data-bind="click: refreshDocumentsGrid"
|
||||||
alt="Refresh documents"
|
alt="Refresh documents"
|
||||||
/>
|
/>
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
class="refreshcol"
|
class="refreshcol"
|
||||||
src="/refresh-cosmos.svg"
|
src="/images/refresh-cosmos.svg"
|
||||||
data-bind="click: refreshDocumentsGrid"
|
data-bind="click: refreshDocumentsGrid"
|
||||||
alt="Refresh documents"
|
alt="Refresh documents"
|
||||||
/>
|
/>
|
||||||
@@ -110,7 +110,7 @@
|
|||||||
<div class="splitter ui-resizable-handle ui-resizable-e colResizePointer" id="h_splitter2"></div>
|
<div class="splitter ui-resizable-handle ui-resizable-e colResizePointer" id="h_splitter2"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="documentWaterMark" data-bind="visible: shouldShowWatermark">
|
<div class="documentWaterMark" data-bind="visible: shouldShowWatermark">
|
||||||
<p><img src="/DocumentWaterMark.svg" alt="Document WaterMark" /></p>
|
<p><img src="/images/DocumentWaterMark.svg" alt="Document WaterMark" /></p>
|
||||||
<p class="documentWaterMarkText">View and resolve conflicts</p>
|
<p class="documentWaterMarkText">View and resolve conflicts</p>
|
||||||
</div>
|
</div>
|
||||||
<!-- Editor - Start -->
|
<!-- Editor - Start -->
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { ConflictDefinition, FeedOptions, QueryIterator, Resource } from "@azure/cosmos";
|
import { ConflictDefinition, FeedOptions, QueryIterator, Resource } from "@azure/cosmos";
|
||||||
|
import DeleteIcon from "images/delete.svg";
|
||||||
|
import DiscardIcon from "images/discard.svg";
|
||||||
|
import SaveIcon from "images/save-cosmos.svg";
|
||||||
import * as ko from "knockout";
|
import * as ko from "knockout";
|
||||||
import Q from "q";
|
import Q from "q";
|
||||||
import DeleteIcon from "../../../images/delete.svg";
|
|
||||||
import DiscardIcon from "../../../images/discard.svg";
|
|
||||||
import SaveIcon from "../../../images/save-cosmos.svg";
|
|
||||||
import * as Constants from "../../Common/Constants";
|
import * as Constants from "../../Common/Constants";
|
||||||
import { DocumentsGridMetrics, KeyCodes } from "../../Common/Constants";
|
import { DocumentsGridMetrics, KeyCodes } from "../../Common/Constants";
|
||||||
import { createDocument } from "../../Common/dataAccess/createDocument";
|
import { createDocument } from "../../Common/dataAccess/createDocument";
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
data-bind="
|
data-bind="
|
||||||
click: onHideFilterClick, event: { keydown: onCloseButtonKeyDown }"
|
click: onHideFilterClick, event: { keydown: onCloseButtonKeyDown }"
|
||||||
>
|
>
|
||||||
<img src="/close-black.svg" style="height: 14px; width: 14px" alt="Hide filter" />
|
<img src="/images/close-black.svg" style="height: 14px; width: 14px" alt="Hide filter" />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -161,7 +161,7 @@
|
|||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
class="refreshcol"
|
class="refreshcol"
|
||||||
src="/refresh-cosmos.svg"
|
src="/images/refresh-cosmos.svg"
|
||||||
data-bind="click: refreshDocumentsGrid"
|
data-bind="click: refreshDocumentsGrid"
|
||||||
alt="Refresh documents"
|
alt="Refresh documents"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
@@ -205,7 +205,7 @@
|
|||||||
<div class="splitter ui-resizable-handle ui-resizable-e colResizePointer" id="h_splitter2"></div>
|
<div class="splitter ui-resizable-handle ui-resizable-e colResizePointer" id="h_splitter2"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="documentWaterMark" data-bind="visible: !shouldShowEditor()">
|
<div class="documentWaterMark" data-bind="visible: !shouldShowEditor()">
|
||||||
<p><img src="/DocumentWaterMark.svg" alt="Document WaterMark" /></p>
|
<p><img src="/images/DocumentWaterMark.svg" alt="Document WaterMark" /></p>
|
||||||
<p class="documentWaterMarkText">Create new or work with existing document(s).</p>
|
<p class="documentWaterMarkText">Create new or work with existing document(s).</p>
|
||||||
</div>
|
</div>
|
||||||
<!-- Editor - Start -->
|
<!-- Editor - Start -->
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import { extractPartitionKey, ItemDefinition, PartitionKeyDefinition, QueryIterator, Resource } from "@azure/cosmos";
|
import { extractPartitionKey, ItemDefinition, PartitionKeyDefinition, QueryIterator, Resource } from "@azure/cosmos";
|
||||||
|
import DeleteDocumentIcon from "images/DeleteDocument.svg";
|
||||||
|
import DiscardIcon from "images/discard.svg";
|
||||||
|
import NewDocumentIcon from "images/NewDocument.svg";
|
||||||
|
import SaveIcon from "images/save-cosmos.svg";
|
||||||
|
import UploadIcon from "images/Upload_16x16.svg";
|
||||||
import * as ko from "knockout";
|
import * as ko from "knockout";
|
||||||
import Q from "q";
|
import Q from "q";
|
||||||
import DeleteDocumentIcon from "../../../images/DeleteDocument.svg";
|
|
||||||
import DiscardIcon from "../../../images/discard.svg";
|
|
||||||
import NewDocumentIcon from "../../../images/NewDocument.svg";
|
|
||||||
import SaveIcon from "../../../images/save-cosmos.svg";
|
|
||||||
import UploadIcon from "../../../images/Upload_16x16.svg";
|
|
||||||
import * as Constants from "../../Common/Constants";
|
import * as Constants from "../../Common/Constants";
|
||||||
import { DocumentsGridMetrics, KeyCodes } from "../../Common/Constants";
|
import { DocumentsGridMetrics, KeyCodes } from "../../Common/Constants";
|
||||||
import { createDocument } from "../../Common/dataAccess/createDocument";
|
import { createDocument } from "../../Common/dataAccess/createDocument";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
import NewVertexIcon from "images/NewVertex.svg";
|
||||||
|
import StyleIcon from "images/Style.svg";
|
||||||
import * as ko from "knockout";
|
import * as ko from "knockout";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import NewVertexIcon from "../../../images/NewVertex.svg";
|
|
||||||
import StyleIcon from "../../../images/Style.svg";
|
|
||||||
import { DatabaseAccount } from "../../Contracts/DataModels";
|
import { DatabaseAccount } from "../../Contracts/DataModels";
|
||||||
import * as ViewModels from "../../Contracts/ViewModels";
|
import * as ViewModels from "../../Contracts/ViewModels";
|
||||||
import { CommandButtonComponentProps } from "../Controls/CommandButton/CommandButtonComponent";
|
import { CommandButtonComponentProps } from "../Controls/CommandButton/CommandButtonComponent";
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
import { stringifyNotebook, toJS } from "@nteract/commutable";
|
import { stringifyNotebook, toJS } from "@nteract/commutable";
|
||||||
|
import ClearAllOutputsIcon from "images/notebook/Notebook-clear-all-outputs.svg";
|
||||||
|
import CopyIcon from "images/notebook/Notebook-copy.svg";
|
||||||
|
import CutIcon from "images/notebook/Notebook-cut.svg";
|
||||||
|
import NewCellIcon from "images/notebook/Notebook-insert-cell.svg";
|
||||||
|
import PasteIcon from "images/notebook/Notebook-paste.svg";
|
||||||
|
import RestartIcon from "images/notebook/Notebook-restart.svg";
|
||||||
|
import RunAllIcon from "images/notebook/Notebook-run-all.svg";
|
||||||
|
import RunIcon from "images/notebook/Notebook-run.svg";
|
||||||
|
import { default as InterruptKernelIcon, default as KillKernelIcon } from "images/notebook/Notebook-stop.svg";
|
||||||
|
import SaveIcon from "images/save-cosmos.svg";
|
||||||
import * as ko from "knockout";
|
import * as ko from "knockout";
|
||||||
import * as Q from "q";
|
import * as Q from "q";
|
||||||
import ClearAllOutputsIcon from "../../../images/notebook/Notebook-clear-all-outputs.svg";
|
|
||||||
import CopyIcon from "../../../images/notebook/Notebook-copy.svg";
|
|
||||||
import CutIcon from "../../../images/notebook/Notebook-cut.svg";
|
|
||||||
import NewCellIcon from "../../../images/notebook/Notebook-insert-cell.svg";
|
|
||||||
import PasteIcon from "../../../images/notebook/Notebook-paste.svg";
|
|
||||||
import RestartIcon from "../../../images/notebook/Notebook-restart.svg";
|
|
||||||
import RunAllIcon from "../../../images/notebook/Notebook-run-all.svg";
|
|
||||||
import RunIcon from "../../../images/notebook/Notebook-run.svg";
|
|
||||||
import { default as InterruptKernelIcon, default as KillKernelIcon } from "../../../images/notebook/Notebook-stop.svg";
|
|
||||||
import SaveIcon from "../../../images/save-cosmos.svg";
|
|
||||||
import { useNotebookSnapshotStore } from "../../hooks/useNotebookSnapshotStore";
|
import { useNotebookSnapshotStore } from "../../hooks/useNotebookSnapshotStore";
|
||||||
import { Action, ActionModifiers, Source } from "../../Shared/Telemetry/TelemetryConstants";
|
import { Action, ActionModifiers, Source } from "../../Shared/Telemetry/TelemetryConstants";
|
||||||
import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
|
import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="warningErrorContainer" aria-live="assertive" data-bind="visible: maybeSubQuery">
|
<div class="warningErrorContainer" aria-live="assertive" data-bind="visible: maybeSubQuery">
|
||||||
<div class="warningErrorContent">
|
<div class="warningErrorContent">
|
||||||
<span><img class="paneErrorIcon" src="/info_color.svg" alt="Error" /></span>
|
<span><img class="paneErrorIcon" src="/images/info_color.svg" alt="Error" /></span>
|
||||||
<span class="warningErrorDetailsLinkContainer">
|
<span class="warningErrorDetailsLinkContainer">
|
||||||
We have detected you may be using a subquery. Non-correlated subqueries are not currently supported.
|
We have detected you may be using a subquery. Non-correlated subqueries are not currently supported.
|
||||||
<a href="https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-subquery"
|
<a href="https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-subquery"
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
></editor>
|
></editor>
|
||||||
<!-- Splitter - Start -->
|
<!-- Splitter - Start -->
|
||||||
<div class="splitter ui-resizable-handle ui-resizable-s" data-bind="attr: { id: splitterId }">
|
<div class="splitter ui-resizable-handle ui-resizable-s" data-bind="attr: { id: splitterId }">
|
||||||
<img class="queryEditorHorizontalSplitter" src="/HorizontalSplitter.svg" alt="Splitter" />
|
<img class="queryEditorHorizontalSplitter" src="/images/HorizontalSplitter.svg" alt="Splitter" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Splitter - End -->
|
<!-- Splitter - End -->
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
class="queryEditorWatermark"
|
class="queryEditorWatermark"
|
||||||
data-bind="visible: allResultsMetadata().length === 0 && !error() && !queryResults() && !isExecuting()"
|
data-bind="visible: allResultsMetadata().length === 0 && !error() && !queryResults() && !isExecuting()"
|
||||||
>
|
>
|
||||||
<p><img src="/RunQuery.png" alt="Execute Query Watermark" /></p>
|
<p><img src="/images/RunQuery.png" alt="Execute Query Watermark" /></p>
|
||||||
<p class="queryEditorWatermarkText">Execute a query to see the results</p>
|
<p class="queryEditorWatermarkText">Execute a query to see the results</p>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@@ -145,7 +145,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span title="Retrieved document count">Retrieved document count</span>
|
<span title="Retrieved document count">Retrieved document count</span>
|
||||||
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
||||||
<img class="infoImg" src="/info-bubble.svg" alt="More information" />
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
<span class="queryMetricTooltipText">Total number of retrieved documents</span>
|
<span class="queryMetricTooltipText">Total number of retrieved documents</span>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span title="Retrieved document size">Retrieved document size</span>
|
<span title="Retrieved document size">Retrieved document size</span>
|
||||||
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
||||||
<img class="infoImg" src="/info-bubble.svg" alt="More information" />
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
<span class="queryMetricTooltipText">Total size of retrieved documents in bytes</span>
|
<span class="queryMetricTooltipText">Total size of retrieved documents in bytes</span>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span title="Output document count">Output document count</span>
|
<span title="Output document count">Output document count</span>
|
||||||
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
||||||
<img class="infoImg" src="/info-bubble.svg" alt="More information" />
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
<span class="queryMetricTooltipText">Number of output documents</span>
|
<span class="queryMetricTooltipText">Number of output documents</span>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span title="Output document size">Output document size</span>
|
<span title="Output document size">Output document size</span>
|
||||||
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
||||||
<img class="infoImg" src="/info-bubble.svg" alt="More information" />
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
<span class="queryMetricTooltipText">Total size of output documents in bytes</span>
|
<span class="queryMetricTooltipText">Total size of output documents in bytes</span>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -191,7 +191,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span title="Index hit document count">Index hit document count</span>
|
<span title="Index hit document count">Index hit document count</span>
|
||||||
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
||||||
<img class="infoImg" src="/info-bubble.svg" alt="More information" />
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
<span class="queryMetricTooltipText">Total number of documents matched by the filter</span>
|
<span class="queryMetricTooltipText">Total number of documents matched by the filter</span>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -201,7 +201,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span title="Index lookup time">Index lookup time</span>
|
<span title="Index lookup time">Index lookup time</span>
|
||||||
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
||||||
<img class="infoImg" src="/info-bubble.svg" alt="More information" />
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
<span class="queryMetricTooltipText">Time spent in physical index layer</span>
|
<span class="queryMetricTooltipText">Time spent in physical index layer</span>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -213,7 +213,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span title="Document load time">Document load time</span>
|
<span title="Document load time">Document load time</span>
|
||||||
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
||||||
<img class="infoImg" src="/info-bubble.svg" alt="More information" />
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
<span class="queryMetricTooltipText">Time spent in loading documents</span>
|
<span class="queryMetricTooltipText">Time spent in loading documents</span>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -225,7 +225,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span title="Query engine execution time">Query engine execution time</span>
|
<span title="Query engine execution time">Query engine execution time</span>
|
||||||
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
||||||
<img class="infoImg" src="/info-bubble.svg" alt="More information" />
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
<span class="queryMetricTooltipText queryEngineExeTimeInfo"
|
<span class="queryMetricTooltipText queryEngineExeTimeInfo"
|
||||||
>Time spent by the query engine to execute the query expression (excludes other execution times
|
>Time spent by the query engine to execute the query expression (excludes other execution times
|
||||||
like load documents or write results)</span
|
like load documents or write results)</span
|
||||||
@@ -243,7 +243,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span title="System function execution time">System function execution time</span>
|
<span title="System function execution time">System function execution time</span>
|
||||||
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
||||||
<img class="infoImg" src="/info-bubble.svg" alt="More information" />
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
<span class="queryMetricTooltipText">Total time spent executing system (built-in) functions</span>
|
<span class="queryMetricTooltipText">Total time spent executing system (built-in) functions</span>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -258,7 +258,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span title="User defined function execution time">User defined function execution time</span>
|
<span title="User defined function execution time">User defined function execution time</span>
|
||||||
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
||||||
<img class="infoImg" src="/info-bubble.svg" alt="More information" />
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
<span class="queryMetricTooltipText">Total time spent executing user-defined functions</span>
|
<span class="queryMetricTooltipText">Total time spent executing user-defined functions</span>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -273,7 +273,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span title="Document write time">Document write time</span>
|
<span title="Document write time">Document write time</span>
|
||||||
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
<span class="queryMetricInfoTooltip" role="tooltip" tabindex="0">
|
||||||
<img class="infoImg" src="/info-bubble.svg" alt="More information" />
|
<img class="infoImg" src="/images/info-bubble.svg" alt="More information" />
|
||||||
<span class="queryMetricTooltipText">Time spent to write query result set to response buffer</span>
|
<span class="queryMetricTooltipText">Time spent to write query result set to response buffer</span>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -300,7 +300,7 @@
|
|||||||
tabindex="0"
|
tabindex="0"
|
||||||
data-bind="event: { click: onDownloadQueryMetricsCsvClick, keypress: onDownloadQueryMetricsCsvKeyPress }"
|
data-bind="event: { click: onDownloadQueryMetricsCsvClick, keypress: onDownloadQueryMetricsCsvKeyPress }"
|
||||||
>
|
>
|
||||||
<img class="downloadCsvImg" src="/DownloadQuery.svg" alt="download query metrics csv" />
|
<img class="downloadCsvImg" src="/images/DownloadQuery.svg" alt="download query metrics csv" />
|
||||||
<span>Per-partition query metrics (CSV)</span>
|
<span>Per-partition query metrics (CSV)</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
import ExecuteQueryIcon from "images/ExecuteQuery.svg";
|
||||||
|
import SaveQueryIcon from "images/save-cosmos.svg";
|
||||||
import * as ko from "knockout";
|
import * as ko from "knockout";
|
||||||
import ExecuteQueryIcon from "../../../images/ExecuteQuery.svg";
|
|
||||||
import SaveQueryIcon from "../../../images/save-cosmos.svg";
|
|
||||||
import * as Constants from "../../Common/Constants";
|
import * as Constants from "../../Common/Constants";
|
||||||
import { queryDocuments } from "../../Common/dataAccess/queryDocuments";
|
import { queryDocuments } from "../../Common/dataAccess/queryDocuments";
|
||||||
import { queryDocumentsPage } from "../../Common/dataAccess/queryDocumentsPage";
|
import { queryDocumentsPage } from "../../Common/dataAccess/queryDocumentsPage";
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<!-- Tables Query Tab Errors - Start-->
|
<!-- Tables Query Tab Errors - Start-->
|
||||||
<div class="error-bar">
|
<div class="error-bar">
|
||||||
<div class="error-message" aria-label="Error Message" data-bind="visible: hasQueryError">
|
<div class="error-message" aria-label="Error Message" data-bind="visible: hasQueryError">
|
||||||
<span><img class="entity-error-Img" src="/error_red.svg" /></span>
|
<span><img class="entity-error-Img" src="/images/error_red.svg" /></span>
|
||||||
<span class="error-text" role="alert" data-bind="text: queryErrorMessage"></span>
|
<span class="error-text" role="alert" data-bind="text: queryErrorMessage"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
type="button"
|
type="button"
|
||||||
data-bind="enable: canGroupClauses, attr:{title: groupSelectedClauses}, click: groupClauses"
|
data-bind="enable: canGroupClauses, attr:{title: groupSelectedClauses}, click: groupClauses"
|
||||||
>
|
>
|
||||||
<img class="and-or-svg" src="/And-Or.svg" alt="Group selected clauses" />
|
<img class="and-or-svg" src="/images/And-Or.svg" alt="Group selected clauses" />
|
||||||
</button>
|
</button>
|
||||||
</th>
|
</th>
|
||||||
<th class="clause-table-cell header-background"><!-- Grouping indicator --></th>
|
<th class="clause-table-cell header-background"><!-- Grouping indicator --></th>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
<img
|
<img
|
||||||
class="addclauseProperty-Img"
|
class="addclauseProperty-Img"
|
||||||
style="margin-bottom: 5px"
|
style="margin-bottom: 5px"
|
||||||
src="/Add-property.svg"
|
src="/images/Add-property.svg"
|
||||||
alt="Add new clause"
|
alt="Add new clause"
|
||||||
/>
|
/>
|
||||||
<span style="margin-left: 5px" data-bind="text: addNewClauseLine"></span>
|
<span style="margin-left: 5px" data-bind="text: addNewClauseLine"></span>
|
||||||
@@ -100,12 +100,16 @@
|
|||||||
>
|
>
|
||||||
<!-- ko template: { ifnot: isExpanded} -->
|
<!-- ko template: { ifnot: isExpanded} -->
|
||||||
<div class="themed-images" type="text/html" id="ExpandChevronRight" data-bind="hasFocus: focusExpandIcon">
|
<div class="themed-images" type="text/html" id="ExpandChevronRight" data-bind="hasFocus: focusExpandIcon">
|
||||||
<img class="imgiconwidth expand-triangle expand-triangle-right" src="/Triangle-right.svg" alt="toggle" />
|
<img
|
||||||
|
class="imgiconwidth expand-triangle expand-triangle-right"
|
||||||
|
src="/images/Triangle-right.svg"
|
||||||
|
alt="toggle"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<!-- /ko -->
|
<!-- /ko -->
|
||||||
<!-- ko template: { if: isExpanded} -->
|
<!-- ko template: { if: isExpanded} -->
|
||||||
<div class="themed-images" type="text/html" id="ExpandChevronDown">
|
<div class="themed-images" type="text/html" id="ExpandChevronDown">
|
||||||
<img class="imgiconwidth expand-triangle" src="/Triangle-down.svg" alt="toggle" />
|
<img class="imgiconwidth expand-triangle" src="/images/Triangle-down.svg" alt="toggle" />
|
||||||
</div>
|
</div>
|
||||||
<!-- /ko -->
|
<!-- /ko -->
|
||||||
<span>Advanced Options</span>
|
<span>Advanced Options</span>
|
||||||
@@ -122,14 +126,14 @@
|
|||||||
aria-label="Show top results"
|
aria-label="Show top results"
|
||||||
/>
|
/>
|
||||||
<div role="alert" aria-atomic="true" class="inline-div" data-bind="visible: isExceedingLimit">
|
<div role="alert" aria-atomic="true" class="inline-div" data-bind="visible: isExceedingLimit">
|
||||||
<img class="advanced-options-icon" src="/QueryBuilder/StatusWarning_16x.png" />
|
<img class="advanced-options-icon" src="/images/QueryBuilder/StatusWarning_16x.png" />
|
||||||
<span data-bind="text: topValueLimitMessage"></span>
|
<span data-bind="text: topValueLimitMessage"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="select">
|
<div class="select">
|
||||||
<span> Select fields for query: </span>
|
<span> Select fields for query: </span>
|
||||||
<div data-bind="visible: isSelected">
|
<div data-bind="visible: isSelected">
|
||||||
<img class="advanced-options-icon" src="/QueryBuilder/QueryInformation_16x.png" />
|
<img class="advanced-options-icon" src="/images/QueryBuilder/QueryInformation_16x.png" />
|
||||||
<span class="select-options-text" data-bind="text: selectMessage" />
|
<span class="select-options-text" data-bind="text: selectMessage" />
|
||||||
</div>
|
</div>
|
||||||
<a
|
<a
|
||||||
@@ -172,7 +176,7 @@
|
|||||||
tabindex="0"
|
tabindex="0"
|
||||||
data-bind="click: $parent.addClauseIndex.bind($data, $index()), event: { keydown: $parent.onAddClauseKeyDown.bind($data, $index()) }, attr:{title: $parent.insertNewFilterLine}"
|
data-bind="click: $parent.addClauseIndex.bind($data, $index()), event: { keydown: $parent.onAddClauseKeyDown.bind($data, $index()) }, attr:{title: $parent.insertNewFilterLine}"
|
||||||
>
|
>
|
||||||
<img class="querybuilder-addpropertyImg" src="/Add-property.svg" alt="Add clause" />
|
<img class="querybuilder-addpropertyImg" src="/images/Add-property.svg" alt="Add clause" />
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span
|
||||||
class="entity-Add-Cancel"
|
class="entity-Add-Cancel"
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
|
import AddEntityIcon from "images/AddEntity.svg";
|
||||||
|
import DeleteEntitiesIcon from "images/DeleteEntities.svg";
|
||||||
|
import EditEntityIcon from "images/Edit-entity.svg";
|
||||||
|
import ExecuteQueryIcon from "images/ExecuteQuery.svg";
|
||||||
|
import QueryBuilderIcon from "images/Query-Builder.svg";
|
||||||
|
import QueryTextIcon from "images/Query-Text.svg";
|
||||||
import * as ko from "knockout";
|
import * as ko from "knockout";
|
||||||
import Q from "q";
|
import Q from "q";
|
||||||
import AddEntityIcon from "../../../images/AddEntity.svg";
|
|
||||||
import DeleteEntitiesIcon from "../../../images/DeleteEntities.svg";
|
|
||||||
import EditEntityIcon from "../../../images/Edit-entity.svg";
|
|
||||||
import ExecuteQueryIcon from "../../../images/ExecuteQuery.svg";
|
|
||||||
import QueryBuilderIcon from "../../../images/Query-Builder.svg";
|
|
||||||
import QueryTextIcon from "../../../images/Query-Text.svg";
|
|
||||||
import * as ViewModels from "../../Contracts/ViewModels";
|
import * as ViewModels from "../../Contracts/ViewModels";
|
||||||
import { userContext } from "../../UserContext";
|
import { userContext } from "../../UserContext";
|
||||||
import { CommandButtonComponentProps } from "../Controls/CommandButton/CommandButtonComponent";
|
import { CommandButtonComponentProps } from "../Controls/CommandButton/CommandButtonComponent";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
import DiscardIcon from "images/discard.svg";
|
||||||
|
import SaveIcon from "images/save-cosmos.svg";
|
||||||
import * as ko from "knockout";
|
import * as ko from "knockout";
|
||||||
import Q from "q";
|
import Q from "q";
|
||||||
import DiscardIcon from "../../../images/discard.svg";
|
|
||||||
import SaveIcon from "../../../images/save-cosmos.svg";
|
|
||||||
import * as Constants from "../../Common/Constants";
|
import * as Constants from "../../Common/Constants";
|
||||||
import editable from "../../Common/EditableUtility";
|
import editable from "../../Common/EditableUtility";
|
||||||
import * as DataModels from "../../Contracts/DataModels";
|
import * as DataModels from "../../Contracts/DataModels";
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { Resource, StoredProcedureDefinition } from "@azure/cosmos";
|
import { Resource, StoredProcedureDefinition } from "@azure/cosmos";
|
||||||
|
import ExecuteQueryIcon from "images/ExecuteQuery.svg";
|
||||||
import * as ko from "knockout";
|
import * as ko from "knockout";
|
||||||
import Q from "q";
|
import Q from "q";
|
||||||
import * as _ from "underscore";
|
import * as _ from "underscore";
|
||||||
import ExecuteQueryIcon from "../../../images/ExecuteQuery.svg";
|
|
||||||
import * as Constants from "../../Common/Constants";
|
import * as Constants from "../../Common/Constants";
|
||||||
import { createStoredProcedure } from "../../Common/dataAccess/createStoredProcedure";
|
import { createStoredProcedure } from "../../Common/dataAccess/createStoredProcedure";
|
||||||
import { updateStoredProcedure } from "../../Common/dataAccess/updateStoredProcedure";
|
import { updateStoredProcedure } from "../../Common/dataAccess/updateStoredProcedure";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
import loadingIcon from "images/circular_loader_black_16x16.gif";
|
||||||
|
import errorIcon from "images/close-black.svg";
|
||||||
import ko from "knockout";
|
import ko from "knockout";
|
||||||
import React, { useEffect, useRef, useState } from "react";
|
import React, { useEffect, useRef, useState } from "react";
|
||||||
import loadingIcon from "../../../images/circular_loader_black_16x16.gif";
|
|
||||||
import errorIcon from "../../../images/close-black.svg";
|
|
||||||
import { useObservable } from "../../hooks/useObservable";
|
import { useObservable } from "../../hooks/useObservable";
|
||||||
import TabsBase from "./TabsBase";
|
import TabsBase from "./TabsBase";
|
||||||
|
|
||||||
|
|||||||
@@ -262,9 +262,10 @@ export default class Database implements ViewModels.Database {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private getDeltaCollections(
|
private getDeltaCollections(updatedCollectionsList: DataModels.Collection[]): {
|
||||||
updatedCollectionsList: DataModels.Collection[]
|
toAdd: DataModels.Collection[];
|
||||||
): { toAdd: DataModels.Collection[]; toDelete: Collection[] } {
|
toDelete: Collection[];
|
||||||
|
} {
|
||||||
const collectionsToAdd: DataModels.Collection[] = _.filter(
|
const collectionsToAdd: DataModels.Collection[] = _.filter(
|
||||||
updatedCollectionsList,
|
updatedCollectionsList,
|
||||||
(collection: DataModels.Collection) => {
|
(collection: DataModels.Collection) => {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { ResourceTreeAdapter } from "./ResourceTreeAdapter";
|
|||||||
|
|
||||||
describe("ResourceTreeAdapter", () => {
|
describe("ResourceTreeAdapter", () => {
|
||||||
const mockContainer = (): Explorer =>
|
const mockContainer = (): Explorer =>
|
||||||
(({
|
({
|
||||||
selectedNode: ko.observable<ViewModels.TreeNode>({
|
selectedNode: ko.observable<ViewModels.TreeNode>({
|
||||||
nodeKind: "nodeKind",
|
nodeKind: "nodeKind",
|
||||||
rid: "rid",
|
rid: "rid",
|
||||||
@@ -19,11 +19,11 @@ describe("ResourceTreeAdapter", () => {
|
|||||||
},
|
},
|
||||||
isNotebookEnabled: ko.observable<boolean>(true),
|
isNotebookEnabled: ko.observable<boolean>(true),
|
||||||
databases: ko.observable<ViewModels.Database[]>([]),
|
databases: ko.observable<ViewModels.Database[]>([]),
|
||||||
} as unknown) as Explorer);
|
} as unknown as Explorer);
|
||||||
|
|
||||||
// TODO isDataNodeSelected needs a better design and refactor, but for now, we protect some of the code paths
|
// TODO isDataNodeSelected needs a better design and refactor, but for now, we protect some of the code paths
|
||||||
describe("isDataNodeSelected", () => {
|
describe("isDataNodeSelected", () => {
|
||||||
it("it should not select if no selected node", () => {
|
it("if no selected node it should not select", () => {
|
||||||
const explorer = mockContainer();
|
const explorer = mockContainer();
|
||||||
explorer.selectedNode(undefined);
|
explorer.selectedNode(undefined);
|
||||||
const resourceTreeAdapter = new ResourceTreeAdapter(explorer);
|
const resourceTreeAdapter = new ResourceTreeAdapter(explorer);
|
||||||
@@ -31,13 +31,13 @@ describe("ResourceTreeAdapter", () => {
|
|||||||
expect(isDataNodeSelected).toBeFalsy();
|
expect(isDataNodeSelected).toBeFalsy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("it should not select incorrect subnodekinds", () => {
|
it("incorrect subnodekinds it should not select", () => {
|
||||||
const resourceTreeAdapter = new ResourceTreeAdapter(mockContainer());
|
const resourceTreeAdapter = new ResourceTreeAdapter(mockContainer());
|
||||||
const isDataNodeSelected = resourceTreeAdapter.isDataNodeSelected("foo", "bar", undefined);
|
const isDataNodeSelected = resourceTreeAdapter.isDataNodeSelected("foo", "bar", undefined);
|
||||||
expect(isDataNodeSelected).toBeFalsy();
|
expect(isDataNodeSelected).toBeFalsy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("it should not select if no active tab", () => {
|
it("if no active tab it should not select", () => {
|
||||||
const explorer = mockContainer();
|
const explorer = mockContainer();
|
||||||
explorer.tabsManager.activeTab(undefined);
|
explorer.tabsManager.activeTab(undefined);
|
||||||
const resourceTreeAdapter = new ResourceTreeAdapter(explorer);
|
const resourceTreeAdapter = new ResourceTreeAdapter(explorer);
|
||||||
@@ -48,12 +48,12 @@ describe("ResourceTreeAdapter", () => {
|
|||||||
it("should select if correct database node regardless of subnodekinds", () => {
|
it("should select if correct database node regardless of subnodekinds", () => {
|
||||||
const subNodeKind = ViewModels.CollectionTabKind.Documents;
|
const subNodeKind = ViewModels.CollectionTabKind.Documents;
|
||||||
const explorer = mockContainer();
|
const explorer = mockContainer();
|
||||||
explorer.selectedNode(({
|
explorer.selectedNode({
|
||||||
nodeKind: "Database",
|
nodeKind: "Database",
|
||||||
rid: "dbrid",
|
rid: "dbrid",
|
||||||
id: ko.observable<string>("dbid"),
|
id: ko.observable<string>("dbid"),
|
||||||
selectedSubnodeKind: ko.observable<ViewModels.CollectionTabKind>(subNodeKind),
|
selectedSubnodeKind: ko.observable<ViewModels.CollectionTabKind>(subNodeKind),
|
||||||
} as unknown) as ViewModels.TreeNode);
|
} as unknown as ViewModels.TreeNode);
|
||||||
const resourceTreeAdapter = new ResourceTreeAdapter(explorer);
|
const resourceTreeAdapter = new ResourceTreeAdapter(explorer);
|
||||||
const isDataNodeSelected = resourceTreeAdapter.isDataNodeSelected("dbid", undefined, [
|
const isDataNodeSelected = resourceTreeAdapter.isDataNodeSelected("dbid", undefined, [
|
||||||
ViewModels.CollectionTabKind.Documents,
|
ViewModels.CollectionTabKind.Documents,
|
||||||
@@ -67,13 +67,13 @@ describe("ResourceTreeAdapter", () => {
|
|||||||
explorer.tabsManager.activeTab({
|
explorer.tabsManager.activeTab({
|
||||||
tabKind: subNodeKind,
|
tabKind: subNodeKind,
|
||||||
} as TabsBase);
|
} as TabsBase);
|
||||||
explorer.selectedNode(({
|
explorer.selectedNode({
|
||||||
nodeKind: "Collection",
|
nodeKind: "Collection",
|
||||||
rid: "collrid",
|
rid: "collrid",
|
||||||
databaseId: "dbid",
|
databaseId: "dbid",
|
||||||
id: ko.observable<string>("collid"),
|
id: ko.observable<string>("collid"),
|
||||||
selectedSubnodeKind: ko.observable<ViewModels.CollectionTabKind>(subNodeKind),
|
selectedSubnodeKind: ko.observable<ViewModels.CollectionTabKind>(subNodeKind),
|
||||||
} as unknown) as ViewModels.TreeNode);
|
} as unknown as ViewModels.TreeNode);
|
||||||
const resourceTreeAdapter = new ResourceTreeAdapter(explorer);
|
const resourceTreeAdapter = new ResourceTreeAdapter(explorer);
|
||||||
let isDataNodeSelected = resourceTreeAdapter.isDataNodeSelected("dbid", "collid", [subNodeKind]);
|
let isDataNodeSelected = resourceTreeAdapter.isDataNodeSelected("dbid", "collid", [subNodeKind]);
|
||||||
expect(isDataNodeSelected).toBeTruthy();
|
expect(isDataNodeSelected).toBeTruthy();
|
||||||
@@ -82,26 +82,26 @@ describe("ResourceTreeAdapter", () => {
|
|||||||
explorer.tabsManager.activeTab({
|
explorer.tabsManager.activeTab({
|
||||||
tabKind: subNodeKind,
|
tabKind: subNodeKind,
|
||||||
} as TabsBase);
|
} as TabsBase);
|
||||||
explorer.selectedNode(({
|
explorer.selectedNode({
|
||||||
nodeKind: "Collection",
|
nodeKind: "Collection",
|
||||||
rid: "collrid",
|
rid: "collrid",
|
||||||
databaseId: "dbid",
|
databaseId: "dbid",
|
||||||
id: ko.observable<string>("collid"),
|
id: ko.observable<string>("collid"),
|
||||||
selectedSubnodeKind: ko.observable<ViewModels.CollectionTabKind>(subNodeKind),
|
selectedSubnodeKind: ko.observable<ViewModels.CollectionTabKind>(subNodeKind),
|
||||||
} as unknown) as ViewModels.TreeNode);
|
} as unknown as ViewModels.TreeNode);
|
||||||
isDataNodeSelected = resourceTreeAdapter.isDataNodeSelected("dbid", "collid", [subNodeKind]);
|
isDataNodeSelected = resourceTreeAdapter.isDataNodeSelected("dbid", "collid", [subNodeKind]);
|
||||||
expect(isDataNodeSelected).toBeTruthy();
|
expect(isDataNodeSelected).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should not select incorrect collection node (e.g. Settings)", () => {
|
it("should not select incorrect collection node (e.g. Settings)", () => {
|
||||||
const explorer = mockContainer();
|
const explorer = mockContainer();
|
||||||
explorer.selectedNode(({
|
explorer.selectedNode({
|
||||||
nodeKind: "Collection",
|
nodeKind: "Collection",
|
||||||
rid: "collrid",
|
rid: "collrid",
|
||||||
databaseId: "dbid",
|
databaseId: "dbid",
|
||||||
id: ko.observable<string>("collid"),
|
id: ko.observable<string>("collid"),
|
||||||
selectedSubnodeKind: ko.observable<ViewModels.CollectionTabKind>(ViewModels.CollectionTabKind.Documents),
|
selectedSubnodeKind: ko.observable<ViewModels.CollectionTabKind>(ViewModels.CollectionTabKind.Documents),
|
||||||
} as unknown) as ViewModels.TreeNode);
|
} as unknown as ViewModels.TreeNode);
|
||||||
explorer.tabsManager.activeTab({
|
explorer.tabsManager.activeTab({
|
||||||
tabKind: ViewModels.CollectionTabKind.Documents,
|
tabKind: ViewModels.CollectionTabKind.Documents,
|
||||||
} as TabsBase);
|
} as TabsBase);
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
import { Callout, DirectionalHint, ICalloutProps, ILinkProps, Link, Stack, Text } from "@fluentui/react";
|
import { Callout, DirectionalHint, ICalloutProps, ILinkProps, Link, Stack, Text } from "@fluentui/react";
|
||||||
|
import CosmosDBIcon from "images/Azure-Cosmos-DB.svg";
|
||||||
|
import DeleteIcon from "images/delete.svg";
|
||||||
|
import GalleryIcon from "images/GalleryIcon.svg";
|
||||||
|
import FileIcon from "images/notebook/file-cosmos.svg";
|
||||||
|
import CopyIcon from "images/notebook/Notebook-copy.svg";
|
||||||
|
import NewNotebookIcon from "images/notebook/Notebook-new.svg";
|
||||||
|
import NotebookIcon from "images/notebook/Notebook-resource.svg";
|
||||||
|
import PublishIcon from "images/notebook/publish_content.svg";
|
||||||
|
import RefreshIcon from "images/refresh-cosmos.svg";
|
||||||
|
import CollectionIcon from "images/tree-collection.svg";
|
||||||
import * as ko from "knockout";
|
import * as ko from "knockout";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import CosmosDBIcon from "../../../images/Azure-Cosmos-DB.svg";
|
|
||||||
import DeleteIcon from "../../../images/delete.svg";
|
|
||||||
import GalleryIcon from "../../../images/GalleryIcon.svg";
|
|
||||||
import FileIcon from "../../../images/notebook/file-cosmos.svg";
|
|
||||||
import CopyIcon from "../../../images/notebook/Notebook-copy.svg";
|
|
||||||
import NewNotebookIcon from "../../../images/notebook/Notebook-new.svg";
|
|
||||||
import NotebookIcon from "../../../images/notebook/Notebook-resource.svg";
|
|
||||||
import PublishIcon from "../../../images/notebook/publish_content.svg";
|
|
||||||
import RefreshIcon from "../../../images/refresh-cosmos.svg";
|
|
||||||
import CollectionIcon from "../../../images/tree-collection.svg";
|
|
||||||
import { ReactAdapter } from "../../Bindings/ReactBindingHandler";
|
import { ReactAdapter } from "../../Bindings/ReactBindingHandler";
|
||||||
import { ArrayHashMap } from "../../Common/ArrayHashMap";
|
import { ArrayHashMap } from "../../Common/ArrayHashMap";
|
||||||
import { Areas } from "../../Common/Constants";
|
import { Areas } from "../../Common/Constants";
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
|
import CollectionIcon from "images/tree-collection.svg";
|
||||||
import * as ko from "knockout";
|
import * as ko from "knockout";
|
||||||
import { mostRecentActivity } from "../MostRecentActivity/MostRecentActivity";
|
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import * as ViewModels from "../../Contracts/ViewModels";
|
|
||||||
import { NotebookContentItem } from "../Notebook/NotebookContentItem";
|
|
||||||
import { ReactAdapter } from "../../Bindings/ReactBindingHandler";
|
import { ReactAdapter } from "../../Bindings/ReactBindingHandler";
|
||||||
import { TreeComponent, TreeNode } from "../Controls/TreeComponent/TreeComponent";
|
import * as ViewModels from "../../Contracts/ViewModels";
|
||||||
import CollectionIcon from "../../../images/tree-collection.svg";
|
|
||||||
import Explorer from "../Explorer";
|
|
||||||
import { userContext } from "../../UserContext";
|
import { userContext } from "../../UserContext";
|
||||||
|
import { TreeComponent, TreeNode } from "../Controls/TreeComponent/TreeComponent";
|
||||||
|
import Explorer from "../Explorer";
|
||||||
|
import { mostRecentActivity } from "../MostRecentActivity/MostRecentActivity";
|
||||||
|
import { NotebookContentItem } from "../Notebook/NotebookContentItem";
|
||||||
|
|
||||||
export class ResourceTreeAdapterForResourceToken implements ReactAdapter {
|
export class ResourceTreeAdapterForResourceToken implements ReactAdapter {
|
||||||
public parameters: ko.Observable<number>;
|
public parameters: ko.Observable<number>;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0" />
|
||||||
<title>Gallery Viewer</title>
|
<title>Gallery Viewer</title>
|
||||||
<link rel="shortcut icon" href="images/CosmosDB_rgb_ui_lighttheme.ico" type="image/x-icon" />
|
<link rel="shortcut icon" href="/images/CosmosDB_rgb_ui_lighttheme.ico" type="image/x-icon" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="overflow-y: scroll">
|
<body style="overflow-y: scroll">
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { useBoolean } from "@fluentui/react-hooks";
|
|
||||||
import { initializeIcons } from "@fluentui/react";
|
import { initializeIcons } from "@fluentui/react";
|
||||||
|
import { useBoolean } from "@fluentui/react-hooks";
|
||||||
|
import ChevronRight from "images/chevron-right.svg";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { render } from "react-dom";
|
import { render } from "react-dom";
|
||||||
import ChevronRight from "../images/chevron-right.svg";
|
|
||||||
import "../less/hostedexplorer.less";
|
import "../less/hostedexplorer.less";
|
||||||
import { AuthType } from "./AuthType";
|
import { AuthType } from "./AuthType";
|
||||||
import { DatabaseAccount } from "./Contracts/DataModels";
|
import { DatabaseAccount } from "./Contracts/DataModels";
|
||||||
|
|||||||
6
src/Libs/jquery.js
vendored
6
src/Libs/jquery.js
vendored
@@ -1,5 +1,5 @@
|
|||||||
import $ from 'jquery';
|
import * as $ from "jquery";
|
||||||
global.$ = $;
|
global.$ = $;
|
||||||
global.jQuery = $;
|
global.jQuery = $;
|
||||||
require('datatables.net-dt');
|
require("datatables.net-dt");
|
||||||
require('datatables.net-colreorder-dt');
|
require("datatables.net-colreorder-dt");
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
// CSS Dependencies
|
// CSS Dependencies
|
||||||
import { initializeIcons } from "@fluentui/react";
|
import { initializeIcons } from "@fluentui/react";
|
||||||
import "bootstrap/dist/css/bootstrap.css";
|
import "bootstrap/dist/css/bootstrap.css";
|
||||||
|
// Image Dependencies
|
||||||
|
import "images/CosmosDB_rgb_ui_lighttheme.ico";
|
||||||
|
import "images/favicon.ico";
|
||||||
|
import hdeConnectImage from "images/HdeConnectCosmosDB.svg";
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import ReactDOM from "react-dom";
|
import ReactDOM from "react-dom";
|
||||||
import "../externals/jquery-ui.min.css";
|
import "../externals/jquery-ui.min.css";
|
||||||
@@ -10,10 +14,6 @@ import "../externals/jquery-ui.theme.min.css";
|
|||||||
import "../externals/jquery.dataTables.min.css";
|
import "../externals/jquery.dataTables.min.css";
|
||||||
import "../externals/jquery.typeahead.min.css";
|
import "../externals/jquery.typeahead.min.css";
|
||||||
import "../externals/jquery.typeahead.min.js";
|
import "../externals/jquery.typeahead.min.js";
|
||||||
// Image Dependencies
|
|
||||||
import "../images/CosmosDB_rgb_ui_lighttheme.ico";
|
|
||||||
import "../images/favicon.ico";
|
|
||||||
import hdeConnectImage from "../images/HdeConnectCosmosDB.svg";
|
|
||||||
import "../less/documentDB.less";
|
import "../less/documentDB.less";
|
||||||
import "../less/forms.less";
|
import "../less/forms.less";
|
||||||
import "../less/infobox.less";
|
import "../less/infobox.less";
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0" />
|
||||||
<title>Notebook Viewer</title>
|
<title>Notebook Viewer</title>
|
||||||
<link rel="shortcut icon" href="images/CosmosDB_rgb_ui_lighttheme.ico" type="image/x-icon" />
|
<link rel="shortcut icon" href="/images/CosmosDB_rgb_ui_lighttheme.ico" type="image/x-icon" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user