Ensure annotations on empty entries in notebook are not lost (#6525)
* entries now selected on creation * select previous entry on deletion * add deletion test * wip * fix adding focus selection * remove previous entry selection logic * null check for event * address review comments * address review comments * refactor tests a bit * typo * remove clicking on entries
This commit is contained in:
@@ -125,7 +125,7 @@
|
||||
v-if="selectedPage && !selectedPage.isLocked"
|
||||
:class="{ 'disabled': activeTransaction }"
|
||||
class="c-notebook__drag-area icon-plus"
|
||||
@click="newEntry()"
|
||||
@click="newEntry(null, $event)"
|
||||
@dragover="dragOver"
|
||||
@drop.capture="dropCapture"
|
||||
@drop="dropOnEntry($event)"
|
||||
@@ -193,7 +193,7 @@ import SearchResults from './SearchResults.vue';
|
||||
import Sidebar from './Sidebar.vue';
|
||||
import ProgressBar from '../../../ui/components/ProgressBar.vue';
|
||||
import { clearDefaultNotebook, getDefaultNotebook, setDefaultNotebook, setDefaultNotebookSectionId, setDefaultNotebookPageId } from '../utils/notebook-storage';
|
||||
import { addNotebookEntry, createNewEmbed, getEntryPosById, getNotebookEntries, mutateObject } from '../utils/notebook-entries';
|
||||
import { addNotebookEntry, createNewEmbed, getEntryPosById, getNotebookEntries, mutateObject, selectEntry } from '../utils/notebook-entries';
|
||||
import { saveNotebookImageDomainObject, updateNamespaceOfDomainObject } from '../utils/notebook-image';
|
||||
import { isNotebookViewType, RESTRICTED_NOTEBOOK_TYPE } from '../notebook-constants';
|
||||
|
||||
@@ -793,15 +793,29 @@ export default {
|
||||
|
||||
return section.id;
|
||||
},
|
||||
async newEntry(embed = null) {
|
||||
async newEntry(embed, event) {
|
||||
this.startTransaction();
|
||||
this.resetSearch();
|
||||
const notebookStorage = this.createNotebookStorageObject();
|
||||
this.updateDefaultNotebook(notebookStorage);
|
||||
const id = await addNotebookEntry(this.openmct, this.domainObject, notebookStorage, embed);
|
||||
|
||||
const element = this.$refs.notebookEntries.querySelector(`#${id}`);
|
||||
const entryAnnotations = this.notebookAnnotations[id] ?? {};
|
||||
selectEntry({
|
||||
element,
|
||||
entryId: id,
|
||||
domainObject: this.domainObject,
|
||||
openmct: this.openmct,
|
||||
notebookAnnotations: entryAnnotations
|
||||
});
|
||||
if (event) {
|
||||
event.stopPropagation();
|
||||
}
|
||||
|
||||
this.filterAndSortEntries();
|
||||
this.focusEntryId = id;
|
||||
this.selectedEntryId = id;
|
||||
this.filterAndSortEntries();
|
||||
},
|
||||
orientationChange() {
|
||||
this.formatSidebar();
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
@dragover="changeCursor"
|
||||
@drop.capture="cancelEditMode"
|
||||
@drop.prevent="dropOnEntry"
|
||||
@click="selectEntry($event, entry)"
|
||||
@click="selectAndEmitEntry($event, entry)"
|
||||
>
|
||||
<div class="c-ne__time-and-content">
|
||||
<div class="c-ne__time-and-creator-and-delete">
|
||||
@@ -164,7 +164,7 @@
|
||||
<script>
|
||||
import NotebookEmbed from './NotebookEmbed.vue';
|
||||
import TextHighlight from '../../../utils/textHighlight/TextHighlight.vue';
|
||||
import { createNewEmbed } from '../utils/notebook-entries';
|
||||
import { createNewEmbed, selectEntry } from '../utils/notebook-entries';
|
||||
import { saveNotebookImageDomainObject, updateNamespaceOfDomainObject } from '../utils/notebook-image';
|
||||
|
||||
import sanitizeHtml from 'sanitize-html';
|
||||
@@ -479,37 +479,18 @@ export default {
|
||||
updateEntryValue($event) {
|
||||
this.editMode = false;
|
||||
const value = $event.target.innerText;
|
||||
if (value !== this.entry.text && value.match(/\S/)) {
|
||||
this.entry.text = sanitizeHtml(value, SANITIZATION_SCHEMA);
|
||||
this.timestampAndUpdate();
|
||||
} else {
|
||||
this.$emit('cancelEdit');
|
||||
}
|
||||
this.entry.text = sanitizeHtml(value, SANITIZATION_SCHEMA);
|
||||
this.timestampAndUpdate();
|
||||
},
|
||||
selectEntry(event, entry) {
|
||||
const targetDetails = {};
|
||||
const keyString = this.openmct.objects.makeKeyString(this.domainObject.identifier);
|
||||
targetDetails[keyString] = {
|
||||
entryId: entry.id
|
||||
};
|
||||
const targetDomainObjects = {};
|
||||
targetDomainObjects[keyString] = this.domainObject;
|
||||
this.openmct.selection.select(
|
||||
[
|
||||
{
|
||||
element: event.currentTarget,
|
||||
context: {
|
||||
type: 'notebook-entry-selection',
|
||||
item: this.domainObject,
|
||||
targetDetails,
|
||||
targetDomainObjects,
|
||||
annotations: this.notebookAnnotations,
|
||||
annotationType: this.openmct.annotation.ANNOTATION_TYPES.NOTEBOOK,
|
||||
onAnnotationChange: this.timestampAndUpdate
|
||||
}
|
||||
}
|
||||
],
|
||||
false);
|
||||
selectAndEmitEntry(event, entry) {
|
||||
selectEntry({
|
||||
element: event.currentTarget,
|
||||
entryId: entry.id,
|
||||
domainObject: this.domainObject,
|
||||
openmct: this.openmct,
|
||||
onAnnotationChange: this.timestampAndUpdate,
|
||||
notebookAnnotations: this.notebookAnnotations
|
||||
});
|
||||
event.stopPropagation();
|
||||
this.$emit('entry-selection', this.entry);
|
||||
}
|
||||
|
||||
@@ -44,6 +44,35 @@ export function addEntryIntoPage(notebookStorage, entries, entry) {
|
||||
return newEntries;
|
||||
}
|
||||
|
||||
export function selectEntry({
|
||||
element, entryId, domainObject, openmct,
|
||||
onAnnotationChange, notebookAnnotations
|
||||
}) {
|
||||
const targetDetails = {};
|
||||
const keyString = openmct.objects.makeKeyString(domainObject.identifier);
|
||||
targetDetails[keyString] = {
|
||||
entryId
|
||||
};
|
||||
const targetDomainObjects = {};
|
||||
targetDomainObjects[keyString] = domainObject;
|
||||
openmct.selection.select(
|
||||
[
|
||||
{
|
||||
element,
|
||||
context: {
|
||||
type: 'notebook-entry-selection',
|
||||
item: domainObject,
|
||||
targetDetails,
|
||||
targetDomainObjects,
|
||||
annotations: notebookAnnotations,
|
||||
annotationType: openmct.annotation.ANNOTATION_TYPES.NOTEBOOK,
|
||||
onAnnotationChange
|
||||
}
|
||||
}
|
||||
],
|
||||
false);
|
||||
}
|
||||
|
||||
export function getHistoricLinkInFixedMode(openmct, bounds, historicLink) {
|
||||
if (historicLink.includes('tc.mode=fixed')) {
|
||||
return historicLink;
|
||||
|
||||
Reference in New Issue
Block a user