improved heuristic of displaing attributes in note list and tooltips #1558

This commit is contained in:
zadam 2021-01-23 21:41:02 +01:00
parent 6408a47a8a
commit 7b0fd639f6
4 changed files with 33 additions and 17 deletions

View File

@ -89,6 +89,10 @@ class Attribute {
return promotedAttributeDefinitionParser.parse(this.value);
}
isDefinitionFor(attr) {
return this.type === 'label' && this.name === `${attr.type}:${attr.name}`;
}
get dto() {
const dto = Object.assign({}, this);
delete dto.treeCache;

View File

@ -479,6 +479,20 @@ class NoteShort {
return relations.map(rel => this.treeCache.notes[rel.value]);
}
getPromotedDefinitionAttributes() {
if (this.hasLabel('hidePromotedAttributes')) {
return [];
}
return this.getAttributes()
.filter(attr => attr.isDefinition())
.filter(attr => {
const def = attr.getDefinition();
return def && def.isPromoted;
});
}
hasAncestor(ancestorNote) {
if (this.noteId === ancestorNote.noteId) {
return true;

View File

@ -80,7 +80,19 @@ async function renderAttributes(attributes, renderIsInheritable) {
}
async function renderNormalAttributes(note) {
const attrs = note.getAttributes().filter(attr => !attr.isDefinition() && !attr.isAutoLink);
const promotedDefinitionAttributes = note.getPromotedDefinitionAttributes();
let attrs = note.getAttributes();
if (promotedDefinitionAttributes.length > 0) {
attrs = attrs.filter(attr => !!promotedDefinitionAttributes.find(promAttr => promAttr.isDefinitionFor(attr)));
}
else {
attrs = attrs.filter(
attr => !attr.isDefinition()
&& !attr.isAutoLink
&& attr.noteId === note.noteId
);
}
const $renderedAttributes = await renderAttributes(attrs, false);

View File

@ -44,7 +44,7 @@ export default class PromotedAttributesWidget extends TabAwareWidget {
}
renderTitle(note) {
const promotedDefAttrs = this.getPromotedDefinitionAttributes();
const promotedDefAttrs = note.getPromotedDefinitionAttributes();
if (promotedDefAttrs.length === 0) {
return { show: false };
@ -62,7 +62,7 @@ export default class PromotedAttributesWidget extends TabAwareWidget {
async refreshWithNote(note) {
this.$container.empty();
const promotedDefAttrs = this.getPromotedDefinitionAttributes();
const promotedDefAttrs = note.getPromotedDefinitionAttributes();
const ownedAttributes = note.getOwnedAttributes();
if (promotedDefAttrs.length === 0) {
@ -104,20 +104,6 @@ export default class PromotedAttributesWidget extends TabAwareWidget {
this.toggleInt(true);
}
getPromotedDefinitionAttributes() {
if (this.note.hasLabel('hidePromotedAttributes')) {
return [];
}
return this.note.getAttributes()
.filter(attr => attr.isDefinition())
.filter(attr => {
const def = attr.getDefinition();
return def && def.isPromoted;
});
}
async createPromotedAttributeCell(definitionAttr, valueAttr, valueName) {
const definition = definitionAttr.getDefinition();