feat: Backlinks (#979)
* feat: backlinks * feat: add backlinkDocumentId to documents.list * chore: refactor fix: create and delete backlink handling * fix: guard against self links * feat: basic frontend fix: race condition * styling * test: fix parse ids * self review * linting * feat: Improved link styling * fix: Increase clickable area at bottom of doc / between references * perf: global styles are SLOW
This commit is contained in:
@@ -24,6 +24,7 @@ export default class DocumentsStore extends BaseStore<Document> {
|
||||
@observable recentlyViewedIds: string[] = [];
|
||||
@observable searchCache: Map<string, SearchResult[]> = new Map();
|
||||
@observable starredIds: Map<string, boolean> = new Map();
|
||||
@observable backlinks: Map<string, string[]> = new Map();
|
||||
|
||||
constructor(rootStore: RootStore) {
|
||||
super(rootStore, Document);
|
||||
@@ -140,6 +141,28 @@ export default class DocumentsStore extends BaseStore<Document> {
|
||||
: undefined;
|
||||
}
|
||||
|
||||
@action
|
||||
fetchBacklinks = async (documentId: string): Promise<?(Document[])> => {
|
||||
const res = await client.post(`/documents.list`, {
|
||||
backlinkDocumentId: documentId,
|
||||
});
|
||||
invariant(res && res.data, 'Document list not available');
|
||||
const { data } = res;
|
||||
runInAction('DocumentsStore#fetchBacklinks', () => {
|
||||
data.forEach(this.add);
|
||||
this.backlinks.set(documentId, data.map(doc => doc.id));
|
||||
});
|
||||
};
|
||||
|
||||
getBacklinedDocuments(documentId: string): Document[] {
|
||||
const documentIds = this.backlinks.get(documentId) || [];
|
||||
return orderBy(
|
||||
compact(documentIds.map(id => this.data.get(id))),
|
||||
'updatedAt',
|
||||
'desc'
|
||||
);
|
||||
}
|
||||
|
||||
@action
|
||||
fetchNamedPage = async (
|
||||
request: string = 'list',
|
||||
|
||||
Reference in New Issue
Block a user