mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-13 21:05:19 +00:00
fix(core): peek db row should always show the related db row property (#8942)
fix BS-1963 depends on https://github.com/toeverything/blocksuite/pull/8818
This commit is contained in:
@@ -44,6 +44,7 @@ export type DefaultOpenProperty =
|
||||
}
|
||||
| {
|
||||
type: 'database';
|
||||
docId: string;
|
||||
databaseId: string;
|
||||
databaseRowId: string;
|
||||
};
|
||||
@@ -385,8 +386,9 @@ const DocPropertiesTableInner = ({
|
||||
defaultOpenProperty?.type === 'database'
|
||||
? [
|
||||
{
|
||||
databaseId: defaultOpenProperty.databaseId,
|
||||
databaseBlockId: defaultOpenProperty.databaseId,
|
||||
rowId: defaultOpenProperty.databaseRowId,
|
||||
docId: defaultOpenProperty.docId,
|
||||
},
|
||||
]
|
||||
: []
|
||||
|
||||
@@ -72,7 +72,6 @@ export class DocDatabaseBacklinksService extends Service {
|
||||
docId: string;
|
||||
rowId: string;
|
||||
databaseBlockId: string;
|
||||
databaseName: string | undefined;
|
||||
}) {
|
||||
return new Observable<DatabaseRow | undefined>(subscriber => {
|
||||
let disposed = false;
|
||||
@@ -128,7 +127,14 @@ export class DocDatabaseBacklinksService extends Service {
|
||||
|
||||
// backlinks (docid:blockid:databaseBlockId)
|
||||
// -> related db rows (DatabaseRow[])
|
||||
watchDbBacklinkRows$(docId: string) {
|
||||
watchDbBacklinkRows$(
|
||||
docId: string,
|
||||
defaultItems?: {
|
||||
docId: string;
|
||||
databaseBlockId: string;
|
||||
rowId: string;
|
||||
}[]
|
||||
) {
|
||||
return this.docsSearchService.watchDatabasesTo(docId).pipe(
|
||||
distinctUntilChanged(equalComparator),
|
||||
map(rows =>
|
||||
@@ -136,14 +142,32 @@ export class DocDatabaseBacklinksService extends Service {
|
||||
(a, b) => a.databaseName?.localeCompare(b.databaseName ?? '') ?? 0
|
||||
)
|
||||
),
|
||||
map(backlinks =>
|
||||
backlinks.map(backlink => {
|
||||
map(backlinks => {
|
||||
// merge default items with backlinks in indexer
|
||||
const merged = [...(defaultItems ?? [])];
|
||||
|
||||
backlinks.forEach(backlink => {
|
||||
// if the backlink is already in the merged list, skip it
|
||||
if (
|
||||
merged.some(
|
||||
item =>
|
||||
item.databaseBlockId === backlink.databaseBlockId &&
|
||||
item.rowId === backlink.rowId &&
|
||||
item.docId === backlink.docId
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
merged.push(backlink);
|
||||
});
|
||||
|
||||
return merged.map(backlink => {
|
||||
return {
|
||||
...backlink,
|
||||
row$: this.watchDatabaseRow$(backlink),
|
||||
};
|
||||
})
|
||||
)
|
||||
});
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,8 +170,9 @@ export const DocDatabaseBacklinkInfo = ({
|
||||
onChange,
|
||||
}: {
|
||||
defaultOpen?: {
|
||||
databaseId: string;
|
||||
databaseBlockId: string;
|
||||
rowId: string;
|
||||
docId: string;
|
||||
}[];
|
||||
onChange?: (
|
||||
row: DatabaseRow,
|
||||
@@ -184,8 +185,11 @@ export const DocDatabaseBacklinkInfo = ({
|
||||
const rows = useLiveData(
|
||||
useMemo(
|
||||
() =>
|
||||
LiveData.from(docDatabaseBacklinks.watchDbBacklinkRows$(doc.id), []),
|
||||
[docDatabaseBacklinks, doc.id]
|
||||
LiveData.from(
|
||||
docDatabaseBacklinks.watchDbBacklinkRows$(doc.id, defaultOpen),
|
||||
[]
|
||||
),
|
||||
[docDatabaseBacklinks, doc.id, defaultOpen]
|
||||
)
|
||||
);
|
||||
|
||||
@@ -200,8 +204,9 @@ export const DocDatabaseBacklinkInfo = ({
|
||||
<DatabaseBacklinkRow
|
||||
defaultOpen={defaultOpen?.some(
|
||||
backlink =>
|
||||
backlink.databaseId === databaseBlockId &&
|
||||
backlink.rowId === rowId
|
||||
backlink.databaseBlockId === databaseBlockId &&
|
||||
backlink.rowId === rowId &&
|
||||
backlink.docId === docId
|
||||
)}
|
||||
row$={row$}
|
||||
onChange={onChange}
|
||||
|
||||
@@ -153,17 +153,6 @@ export class Editor extends Entity {
|
||||
if (!isEqual(selector, omit(editorParams, ['mode']))) {
|
||||
this.setSelector(selector);
|
||||
}
|
||||
|
||||
if (params.databaseId && params.databaseRowId) {
|
||||
const defaultOpenProperty: DefaultOpenProperty = {
|
||||
type: 'database',
|
||||
databaseId: params.databaseId,
|
||||
databaseRowId: params.databaseRowId,
|
||||
};
|
||||
if (!isEqual(defaultOpenProperty, this.defaultOpenProperty$.value)) {
|
||||
this.setDefaultOpenProperty(defaultOpenProperty);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
updating = false;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ export type DocReferenceInfo = {
|
||||
blockIds?: string[];
|
||||
elementIds?: string[];
|
||||
databaseId?: string;
|
||||
databaseDocId?: string;
|
||||
databaseRowId?: string;
|
||||
/**
|
||||
* viewport in edgeless mode
|
||||
|
||||
@@ -169,8 +169,16 @@ function DocPeekPreviewEditor({
|
||||
}
|
||||
|
||||
export function DocPeekPreview({ docRef }: { docRef: DocReferenceInfo }) {
|
||||
const { docId, blockIds, elementIds, mode, xywh, databaseId, databaseRowId } =
|
||||
docRef;
|
||||
const {
|
||||
docId,
|
||||
blockIds,
|
||||
elementIds,
|
||||
mode,
|
||||
xywh,
|
||||
databaseId,
|
||||
databaseDocId,
|
||||
databaseRowId,
|
||||
} = docRef;
|
||||
const { doc, editor, loading } = useEditor(
|
||||
docId,
|
||||
mode,
|
||||
@@ -178,8 +186,9 @@ export function DocPeekPreview({ docRef }: { docRef: DocReferenceInfo }) {
|
||||
blockIds,
|
||||
elementIds,
|
||||
},
|
||||
databaseId && databaseRowId
|
||||
databaseId && databaseRowId && databaseDocId
|
||||
? {
|
||||
docId: databaseDocId,
|
||||
databaseId,
|
||||
databaseRowId,
|
||||
type: 'database',
|
||||
|
||||
@@ -21,4 +21,4 @@
|
||||
"ur": 3,
|
||||
"zh-Hans": 99,
|
||||
"zh-Hant": 98
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user