@deephaven/dashboard-core-plugins 0.27.0 → 0.27.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAIlE,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,CAAC;AAEhE,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI;IACvC,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;IACT,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAG5E,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,sBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG;IAC9C,YAAY,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC/D,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,GACpB,KAAK,IAAI,iBAAiB,CAG5B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,KAAK,IAAI,aAAa,CAO7E;AAID;;GAEG;AACH,cAAM,WAAW;IACf,MAAM,CAAC,aAAa,wBASjB;IAEH;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAChB,KAAK,CAAC,EAAE,SAAS,EACjB,GAAG,CAAC,EAAE,SAAS,EACf,qBAAqB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GACxC,QAAQ;IA0DX;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CACf,OAAO,EAAE,UAAU,EAAE,EACrB,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,SAAS,GACpC,UAAU,GAAG,SAAS;IAMzB;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CACvB,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,MAAM,GACd,IAAI,EAAE;CAmBV;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.tsx"],"names":[],"mappings":"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"}
@@ -16,6 +16,11 @@ export function isLinkablePanel(panel) {
16
16
  var p = panel;
17
17
  return isLinkableFromPanel(panel) && typeof p.setFilterMap === 'function' && typeof p.unsetFilterValue === 'function';
18
18
  }
19
+ export function isLinkableColumn(column) {
20
+ var _column$description;
21
+ // TODO: core/#3358 Use preview/original type property instead of checking description
22
+ return column.description === undefined || !((_column$description = column.description) !== null && _column$description !== void 0 && _column$description.startsWith('Preview of type: '));
23
+ }
19
24
  var log = Log.module('LinkerUtils');
20
25
 
21
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"LinkerUtils.js","names":["shortid","LayoutUtils","TableUtils","Log","ChartPanel","IrisGridPanel","DropdownFilterPanel","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","log","module","LinkerUtils","getLinkType","start","end","isolatedLinkerPanelId","panelId","debug2","panelComponent","error","isCompatibleComponent","ALLOWED_LINKS","get","includes","undefined","columnType","startColumnType","endColumnType","isCompatibleType","getComponentName","findColumn","columns","columnName","find","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","push","id","generate","Map"],"sources":["../../src/linker/LinkerUtils.tsx"],"sourcesContent":["import shortid from 'shortid';\nimport { LayoutUtils, PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { ChartPanel, IrisGridPanel, DropdownFilterPanel } from '../panels';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink';\n\nexport type LinkPoint = {\n panelId: string | string[];\n panelComponent?: string | null;\n columnName: string;\n columnType: string | null;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n operator?: FilterTypeValue;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string | null;\n};\n\nexport type LinkDataValue<T = unknown> = {\n operator: FilterTypeValue;\n text: string;\n value: T;\n startColumnIndex: number;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string;\n filterList: LinkDataValue<T>[];\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\n// [x,y] screen coordinates used by the Linker\nexport type LinkerCoordinate = [number, number];\n\nexport type LinkableFromPanel = PanelComponent & {\n getCoordinateForColumn: (name: string) => LinkerCoordinate;\n};\n\nexport type LinkablePanel = LinkableFromPanel & {\n setFilterMap: (filterMap: LinkFilterMap) => void;\n unsetFilterValue: (name: string, type: string | null) => void;\n};\n\nexport function isLinkableFromPanel(\n panel: PanelComponent\n): panel is LinkableFromPanel {\n const p = panel as LinkableFromPanel;\n return typeof p.getCoordinateForColumn === 'function';\n}\n\nexport function isLinkablePanel(panel: PanelComponent): panel is LinkablePanel {\n const p = panel as LinkablePanel;\n return (\n isLinkableFromPanel(panel) &&\n typeof p.setFilterMap === 'function' &&\n typeof p.unsetFilterValue === 'function'\n );\n}\n\nconst log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n static ALLOWED_LINKS = new Map([\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n LayoutUtils.getComponentName(ChartPanel),\n LayoutUtils.getComponentName(DropdownFilterPanel),\n ],\n ],\n ]);\n\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static getLinkType(\n start?: LinkPoint,\n end?: LinkPoint,\n isolatedLinkerPanelId?: string | string[]\n ): LinkType {\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if (\n start?.panelId == null ||\n end?.panelId == null ||\n start.panelId === end.panelId ||\n (isolatedLinkerPanelId != null &&\n isolatedLinkerPanelId !== start.panelId &&\n isolatedLinkerPanelId !== end.panelId)\n ) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return 'invalid';\n }\n\n if (start.panelComponent == null || end.panelComponent == null) {\n log.error('PanelComponent should not be null', start, end);\n return 'invalid';\n }\n\n const isCompatibleComponent = LinkerUtils.ALLOWED_LINKS.get(\n start.panelComponent\n )?.includes(end.panelComponent);\n\n if (isCompatibleComponent === undefined || !isCompatibleComponent) {\n log.debug2('Incompatible panel components', start, end);\n return 'invalid';\n }\n\n // Check column type compatibility\n const { columnType: startColumnType } = start;\n const { columnType: endColumnType } = end;\n\n // Null columnType in ending link point allows linking to any type\n const isCompatibleType =\n endColumnType === null ||\n TableUtils.isCompatibleType(startColumnType, endColumnType);\n\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return 'invalid';\n }\n\n // If all checks pass, link type is determined by the target panel component\n switch (end.panelComponent) {\n case LayoutUtils.getComponentName(ChartPanel):\n case LayoutUtils.getComponentName(IrisGridPanel):\n return 'tableLink';\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n return 'filterSource';\n default:\n }\n\n log.debug2('Incompatible target panel component', end.panelComponent);\n return 'invalid';\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(\n columns: LinkColumn[],\n { columnName, columnType }: LinkPoint\n ): LinkColumn | undefined {\n return columns.find(\n ({ name, type }) => name === columnName && type === columnType\n );\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(\n links: Link[],\n panelId: string | string[],\n cloneId: string\n ): Link[] {\n const clonedLinks: Link[] = [];\n links.forEach(link => {\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push({\n ...link,\n id: shortid.generate(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: shortid.generate(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\n"],"mappings":"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"}
1
+ {"version":3,"file":"LinkerUtils.js","names":["shortid","LayoutUtils","TableUtils","Log","ChartPanel","IrisGridPanel","DropdownFilterPanel","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","isLinkableColumn","column","description","undefined","startsWith","log","module","LinkerUtils","getLinkType","start","end","isolatedLinkerPanelId","panelId","debug2","panelComponent","error","isCompatibleComponent","ALLOWED_LINKS","get","includes","columnType","startColumnType","endColumnType","isCompatibleType","getComponentName","findColumn","columns","columnName","find","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","push","id","generate","Map"],"sources":["../../src/linker/LinkerUtils.tsx"],"sourcesContent":["import shortid from 'shortid';\nimport { LayoutUtils, PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { ChartPanel, IrisGridPanel, DropdownFilterPanel } from '../panels';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink';\n\nexport type LinkPoint = {\n panelId: string | string[];\n panelComponent?: string | null;\n columnName: string;\n columnType: string | null;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n operator?: FilterTypeValue;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string | null;\n description?: string;\n};\n\nexport type LinkDataValue<T = unknown> = {\n operator: FilterTypeValue;\n text: string;\n value: T;\n startColumnIndex: number;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string;\n filterList: LinkDataValue<T>[];\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\n// [x,y] screen coordinates used by the Linker\nexport type LinkerCoordinate = [number, number];\n\nexport type LinkableFromPanel = PanelComponent & {\n getCoordinateForColumn: (name: string) => LinkerCoordinate;\n};\n\nexport type LinkablePanel = LinkableFromPanel & {\n setFilterMap: (filterMap: LinkFilterMap) => void;\n unsetFilterValue: (name: string, type: string | null) => void;\n};\n\nexport function isLinkableFromPanel(\n panel: PanelComponent\n): panel is LinkableFromPanel {\n const p = panel as LinkableFromPanel;\n return typeof p.getCoordinateForColumn === 'function';\n}\n\nexport function isLinkablePanel(panel: PanelComponent): panel is LinkablePanel {\n const p = panel as LinkablePanel;\n return (\n isLinkableFromPanel(panel) &&\n typeof p.setFilterMap === 'function' &&\n typeof p.unsetFilterValue === 'function'\n );\n}\n\nexport function isLinkableColumn(column: LinkColumn): boolean {\n // TODO: core/#3358 Use preview/original type property instead of checking description\n return (\n column.description === undefined ||\n !column.description?.startsWith('Preview of type: ')\n );\n}\n\nconst log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n static ALLOWED_LINKS = new Map([\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n LayoutUtils.getComponentName(ChartPanel),\n LayoutUtils.getComponentName(DropdownFilterPanel),\n ],\n ],\n ]);\n\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static getLinkType(\n start?: LinkPoint,\n end?: LinkPoint,\n isolatedLinkerPanelId?: string | string[]\n ): LinkType {\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if (\n start?.panelId == null ||\n end?.panelId == null ||\n start.panelId === end.panelId ||\n (isolatedLinkerPanelId != null &&\n isolatedLinkerPanelId !== start.panelId &&\n isolatedLinkerPanelId !== end.panelId)\n ) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return 'invalid';\n }\n\n if (start.panelComponent == null || end.panelComponent == null) {\n log.error('PanelComponent should not be null', start, end);\n return 'invalid';\n }\n\n const isCompatibleComponent = LinkerUtils.ALLOWED_LINKS.get(\n start.panelComponent\n )?.includes(end.panelComponent);\n\n if (isCompatibleComponent === undefined || !isCompatibleComponent) {\n log.debug2('Incompatible panel components', start, end);\n return 'invalid';\n }\n\n // Check column type compatibility\n const { columnType: startColumnType } = start;\n const { columnType: endColumnType } = end;\n\n // Null columnType in ending link point allows linking to any type\n const isCompatibleType =\n endColumnType === null ||\n TableUtils.isCompatibleType(startColumnType, endColumnType);\n\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return 'invalid';\n }\n\n // If all checks pass, link type is determined by the target panel component\n switch (end.panelComponent) {\n case LayoutUtils.getComponentName(ChartPanel):\n case LayoutUtils.getComponentName(IrisGridPanel):\n return 'tableLink';\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n return 'filterSource';\n default:\n }\n\n log.debug2('Incompatible target panel component', end.panelComponent);\n return 'invalid';\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(\n columns: LinkColumn[],\n { columnName, columnType }: LinkPoint\n ): LinkColumn | undefined {\n return columns.find(\n ({ name, type }) => name === columnName && type === columnType\n );\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(\n links: Link[],\n panelId: string | string[],\n cloneId: string\n ): Link[] {\n const clonedLinks: Link[] = [];\n links.forEach(link => {\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push({\n ...link,\n id: shortid.generate(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: shortid.generate(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\n"],"mappings":"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"}
@@ -58,6 +58,7 @@ interface NotebookPanelState {
58
58
  showSaveAsModal: boolean;
59
59
  scriptCode: string;
60
60
  itemName?: string;
61
+ shouldPromptClose: boolean;
61
62
  }
62
63
  declare class NotebookPanel extends Component<NotebookPanelProps, NotebookPanelState> {
63
64
  static COMPONENT: string;
@@ -84,7 +85,6 @@ declare class NotebookPanel extends Component<NotebookPanelProps, NotebookPanelS
84
85
  notebook: ScriptEditor | null;
85
86
  tabTitleElement: Element | null;
86
87
  tabInitOnce: boolean;
87
- shouldPromptClose: boolean;
88
88
  editor?: editor.IStandaloneCodeEditor;
89
89
  initTab(tab: Tab): void;
90
90
  initTabCloseOverride(): void;
@@ -121,6 +121,11 @@ declare class NotebookPanel extends Component<NotebookPanelProps, NotebookPanelS
121
121
  handleCloseDiscard(): void;
122
122
  handleCloseSave(): void;
123
123
  handleCloseCancel(): void;
124
+ /**
125
+ * Closes overwritten tabs
126
+ * @param fileName The name of the file to be overwritten
127
+ */
128
+ handleOverwrite(fileName: string): void;
124
129
  handleCopy(): void;
125
130
  handleEditorInitialized(innerEditor: editor.IStandaloneCodeEditor): void;
126
131
  handleEditorWillDestroy(): void;
@@ -144,8 +149,8 @@ declare class NotebookPanel extends Component<NotebookPanelProps, NotebookPanelS
144
149
  handleSaveSuccess(file: File): void;
145
150
  handleSaveError(error: unknown): void;
146
151
  handleSaveAsCancel(): void;
147
- handleSaveAsSubmit(name: string): void;
148
- handleRenameFile(oldName: string, newName: string): void;
152
+ handleSaveAsSubmit(name: string, isOverwrite?: boolean): void;
153
+ handleRenameFile(oldName: string, newName: string, panelState?: PanelState): void;
149
154
  handleResize(): void;
150
155
  handleRunCommand(command?: string): void;
151
156
  handleRunAll(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"NotebookPanel.d.ts","sourceRoot":"","sources":["../../src/panels/NotebookPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NotebookPanel.d.ts","sourceRoot":"","sources":["../../src/panels/NotebookPanel.tsx"],"names":[],"mappings":"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"}
@@ -54,7 +54,6 @@ class NotebookPanel extends Component {
54
54
  _defineProperty(this, "notebook", void 0);
55
55
  _defineProperty(this, "tabTitleElement", void 0);
56
56
  _defineProperty(this, "tabInitOnce", void 0);
57
- _defineProperty(this, "shouldPromptClose", void 0);
58
57
  _defineProperty(this, "editor", void 0);
59
58
  _defineProperty(this, "getSettings", memoize((initialSettings, isMinimapEnabled) => _objectSpread(_objectSpread({}, initialSettings), {}, {
60
59
  minimap: {
@@ -117,6 +116,7 @@ class NotebookPanel extends Component {
117
116
  this.handleTabFocus = this.handleTabFocus.bind(this);
118
117
  this.handleTabBlur = this.handleTabBlur.bind(this);
119
118
  this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);
119
+ this.handleOverwrite = this.handleOverwrite.bind(this);
120
120
  this.getDropdownOverflowActions = this.getDropdownOverflowActions.bind(this);
121
121
  this.pending = new Pending();
122
122
  this.debouncedSavePanelState = debounce(this.savePanelState.bind(this), DEBOUNCE_PANEL_STATE_UPDATE);
@@ -124,7 +124,6 @@ class NotebookPanel extends Component {
124
124
  this.notebook = null;
125
125
  this.tabTitleElement = null;
126
126
  this.tabInitOnce = false;
127
- this.shouldPromptClose = true;
128
127
  var {
129
128
  isDashboardActive,
130
129
  session,
@@ -176,7 +175,8 @@ class NotebookPanel extends Component {
176
175
  },
177
176
  showCloseModal: false,
178
177
  showSaveAsModal: false,
179
- scriptCode: ''
178
+ scriptCode: '',
179
+ shouldPromptClose: true
180
180
  };
181
181
  log.debug('constructor', props, this.state);
182
182
  }
@@ -239,27 +239,27 @@ class NotebookPanel extends Component {
239
239
  }
240
240
  this.initTabClasses(tab);
241
241
  }
242
-
243
- // override glContainer.close() with a custom closure that checks if needs saving
244
242
  initTabCloseOverride() {
245
243
  var {
246
244
  glContainer
247
245
  } = this.props;
248
- var close = glContainer.close.bind(glContainer);
249
- glContainer.close = () => {
246
+ glContainer.beforeClose(options => {
247
+ if ((options === null || options === void 0 ? void 0 : options.force) === true) {
248
+ return true;
249
+ }
250
250
  var {
251
251
  changeCount,
252
- savedChangeCount
252
+ savedChangeCount,
253
+ shouldPromptClose
253
254
  } = this.state;
254
- if (changeCount !== savedChangeCount && this.shouldPromptClose) {
255
+ if (changeCount !== savedChangeCount && shouldPromptClose) {
255
256
  this.setState({
256
257
  showCloseModal: true
257
258
  });
258
- } else {
259
- close();
259
+ return false;
260
260
  }
261
261
  return true;
262
- };
262
+ });
263
263
  }
264
264
  initTabClasses(tab) {
265
265
  var tabElement = tab.element.get(0);
@@ -479,8 +479,8 @@ class NotebookPanel extends Component {
479
479
  });
480
480
  }
481
481
  handleCloseDiscard() {
482
- this.shouldPromptClose = false;
483
482
  this.setState({
483
+ shouldPromptClose: false,
484
484
  showCloseModal: false
485
485
  });
486
486
  var {
@@ -489,8 +489,8 @@ class NotebookPanel extends Component {
489
489
  glContainer.close();
490
490
  }
491
491
  handleCloseSave() {
492
- this.shouldPromptClose = false;
493
492
  this.setState({
493
+ shouldPromptClose: false,
494
494
  showCloseModal: false
495
495
  });
496
496
  if (this.save()) {
@@ -501,11 +501,28 @@ class NotebookPanel extends Component {
501
501
  }
502
502
  }
503
503
  handleCloseCancel() {
504
- this.shouldPromptClose = true;
505
504
  this.setState({
505
+ shouldPromptClose: true,
506
506
  showCloseModal: false
507
507
  });
508
508
  }
509
+
510
+ /**
511
+ * Closes overwritten tabs
512
+ * @param fileName The name of the file to be overwritten
513
+ */
514
+ handleOverwrite(fileName) {
515
+ var {
516
+ glEventHub
517
+ } = this.props;
518
+ glEventHub.emit(NotebookEvent.CLOSE_FILE, {
519
+ id: fileName,
520
+ itemName: fileName
521
+ }, {
522
+ force: true
523
+ });
524
+ this.focus();
525
+ }
509
526
  handleCopy() {
510
527
  var {
511
528
  fileMetadata,
@@ -746,6 +763,10 @@ class NotebookPanel extends Component {
746
763
  }
747
764
  handleSaveAsSubmit(name) {
748
765
  var _this$getNotebookValu;
766
+ var isOverwrite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
767
+ if (isOverwrite) {
768
+ this.handleOverwrite(name);
769
+ }
749
770
  log.debug('handleSaveAsSubmit', name);
750
771
  var {
751
772
  fileMetadata
@@ -771,10 +792,18 @@ class NotebookPanel extends Component {
771
792
  }
772
793
  this.saveContent(name, content);
773
794
  }
774
- handleRenameFile(oldName, newName) {
795
+ handleRenameFile(oldName, newName, panelState) {
775
796
  var {
776
- fileMetadata
797
+ fileMetadata,
798
+ panelState: curPanelState
777
799
  } = this.state;
800
+ var {
801
+ glContainer
802
+ } = this.props;
803
+ if ((fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.itemName) === "/".concat(newName) && panelState && JSON.stringify(curPanelState) !== JSON.stringify(panelState)) {
804
+ glContainer.close();
805
+ return;
806
+ }
778
807
  if (fileMetadata && fileMetadata.id === oldName) {
779
808
  this.setState({
780
809
  fileMetadata: {