* feat(server): allow document to be created without collectionId * fix(server): policies for a draft doc without collection * fix(app): hide share button for drafts * feat(server): permissions around publishing a draft * fix(server): return drafts without collection * fix(server): handle draft deletion * fix(server): show drafts in deleted docs * fix(server): allow drafts without collection to be restored * feat(server): return drafts in search results * fix: use buildDraftDocument for drafts * fix: remove isDraftWithoutCollection * fix: do not return drafts for team * fix: put invariants * fix: query clause * fix: check only for undefined * fix: restore includeDrafts clause as it was before
40 lines
918 B
TypeScript
40 lines
918 B
TypeScript
import { APM } from "@server/logging/tracing";
|
|
import { Document, Collection, Team } from "@server/models";
|
|
|
|
type Action = {
|
|
type: string;
|
|
text: string;
|
|
name: string;
|
|
value: string;
|
|
};
|
|
|
|
function present(
|
|
document: Document,
|
|
team: Team,
|
|
collection?: Collection | null,
|
|
context?: string,
|
|
actions?: Action[]
|
|
) {
|
|
// the context contains <b> tags around search terms, we convert them here
|
|
// to the markdown format that slack expects to receive.
|
|
const text = context
|
|
? context.replace(/<\/?b>/g, "*").replace(/\n/g, "")
|
|
: document.getSummary();
|
|
|
|
return {
|
|
color: collection?.color,
|
|
title: document.title,
|
|
title_link: `${team.url}${document.url}`,
|
|
footer: collection?.name,
|
|
callback_id: document.id,
|
|
text,
|
|
ts: document.getTimestamp(),
|
|
actions,
|
|
};
|
|
}
|
|
|
|
export default APM.traceFunction({
|
|
serviceName: "presenter",
|
|
spanName: "slackAttachment",
|
|
})(present);
|