Skip to content

Commit

Permalink
Don't duplicate annotation from library when reusing it (#3200)
Browse files Browse the repository at this point in the history
SDESK-4800
  • Loading branch information
pablopunk authored Nov 8, 2019
1 parent 2e76a28 commit d37a5a2
Showing 1 changed file with 30 additions and 15 deletions.
45 changes: 30 additions & 15 deletions scripts/extensions/annotationsLibrary/src/extension.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,50 @@ import {IKnowledgeBaseItem} from './interfaces';

const RESOURCE = 'concept_items';

function annotationExistsInKnowledgeBase(superdesk: ISuperdesk, annotationText: string) {
const {dataApi} = superdesk;
const {nameField} = getFields(superdesk);
const {generateFilterForServer} = superdesk.forms;

return dataApi.query<IKnowledgeBaseItem>(
RESOURCE,
1,
{field: 'name', direction: 'ascending'},
{name: generateFilterForServer(nameField.type, annotationText)},
).then((res: IRestApiResponse<IKnowledgeBaseItem>) => res._items.length > 0);
}

function annotationFromLibraryTabSelectedByDefault(
superdesk: ISuperdesk,
annotationText: string,
mode: 'create' | 'edit',
) {
const {dataApi} = superdesk;
const {assertNever} = superdesk.helpers;
const {nameField} = getFields(superdesk);
const {generateFilterForServer} = superdesk.forms;

if (mode === 'edit') {
return Promise.resolve(false);
} else if (mode === 'create') {
return dataApi.query<IKnowledgeBaseItem>(
RESOURCE,
1,
{field: 'name', direction: 'ascending'},
{name: generateFilterForServer(nameField.type, annotationText)},
).then((res: IRestApiResponse<IKnowledgeBaseItem>) => res._items.length > 0);
return annotationExistsInKnowledgeBase(superdesk, annotationText);
} else {
return assertNever(mode);
}
}

function onAnnotationCreate(superdesk: ISuperdesk, language: string, annotationText: string, definitionHtml: string) {
annotationExistsInKnowledgeBase(superdesk, annotationText)
.then((exists) => {
// Don't create a knowledge base item for that annotation if it already exists
if (!exists) {
superdesk.dataApi.create(RESOURCE, {
language: language,
name: annotationText,
definition_html: definitionHtml,
cpnat_type: 'cpnat:abstract',
});
}
});
}

var extension: IExtension = {
id: 'annotationsLibrary',
activate: (superdesk: ISuperdesk) => {
Expand All @@ -45,12 +65,7 @@ var extension: IExtension = {
selectedByDefault: (annotationText: string, mode: 'create' | 'edit') =>
annotationFromLibraryTabSelectedByDefault(superdesk, annotationText, mode),
onAnnotationCreate: (language: string, annotationText: string, definitionHtml: string) => {
superdesk.dataApi.create(RESOURCE, {
language: language,
name: annotationText,
definition_html: definitionHtml,
cpnat_type: 'cpnat:abstract',
});
return onAnnotationCreate(superdesk, language, annotationText, definitionHtml);
},
},
],
Expand Down

0 comments on commit d37a5a2

Please sign in to comment.