mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-15 05:37:32 +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';
|
type: 'database';
|
||||||
|
docId: string;
|
||||||
databaseId: string;
|
databaseId: string;
|
||||||
databaseRowId: string;
|
databaseRowId: string;
|
||||||
};
|
};
|
||||||
@@ -385,8 +386,9 @@ const DocPropertiesTableInner = ({
|
|||||||
defaultOpenProperty?.type === 'database'
|
defaultOpenProperty?.type === 'database'
|
||||||
? [
|
? [
|
||||||
{
|
{
|
||||||
databaseId: defaultOpenProperty.databaseId,
|
databaseBlockId: defaultOpenProperty.databaseId,
|
||||||
rowId: defaultOpenProperty.databaseRowId,
|
rowId: defaultOpenProperty.databaseRowId,
|
||||||
|
docId: defaultOpenProperty.docId,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
: []
|
: []
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ export class DocDatabaseBacklinksService extends Service {
|
|||||||
docId: string;
|
docId: string;
|
||||||
rowId: string;
|
rowId: string;
|
||||||
databaseBlockId: string;
|
databaseBlockId: string;
|
||||||
databaseName: string | undefined;
|
|
||||||
}) {
|
}) {
|
||||||
return new Observable<DatabaseRow | undefined>(subscriber => {
|
return new Observable<DatabaseRow | undefined>(subscriber => {
|
||||||
let disposed = false;
|
let disposed = false;
|
||||||
@@ -128,7 +127,14 @@ export class DocDatabaseBacklinksService extends Service {
|
|||||||
|
|
||||||
// backlinks (docid:blockid:databaseBlockId)
|
// backlinks (docid:blockid:databaseBlockId)
|
||||||
// -> related db rows (DatabaseRow[])
|
// -> related db rows (DatabaseRow[])
|
||||||
watchDbBacklinkRows$(docId: string) {
|
watchDbBacklinkRows$(
|
||||||
|
docId: string,
|
||||||
|
defaultItems?: {
|
||||||
|
docId: string;
|
||||||
|
databaseBlockId: string;
|
||||||
|
rowId: string;
|
||||||
|
}[]
|
||||||
|
) {
|
||||||
return this.docsSearchService.watchDatabasesTo(docId).pipe(
|
return this.docsSearchService.watchDatabasesTo(docId).pipe(
|
||||||
distinctUntilChanged(equalComparator),
|
distinctUntilChanged(equalComparator),
|
||||||
map(rows =>
|
map(rows =>
|
||||||
@@ -136,14 +142,32 @@ export class DocDatabaseBacklinksService extends Service {
|
|||||||
(a, b) => a.databaseName?.localeCompare(b.databaseName ?? '') ?? 0
|
(a, b) => a.databaseName?.localeCompare(b.databaseName ?? '') ?? 0
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
map(backlinks =>
|
map(backlinks => {
|
||||||
backlinks.map(backlink => {
|
// 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 {
|
return {
|
||||||
...backlink,
|
...backlink,
|
||||||
row$: this.watchDatabaseRow$(backlink),
|
row$: this.watchDatabaseRow$(backlink),
|
||||||
};
|
};
|
||||||
})
|
});
|
||||||
)
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,8 +170,9 @@ export const DocDatabaseBacklinkInfo = ({
|
|||||||
onChange,
|
onChange,
|
||||||
}: {
|
}: {
|
||||||
defaultOpen?: {
|
defaultOpen?: {
|
||||||
databaseId: string;
|
databaseBlockId: string;
|
||||||
rowId: string;
|
rowId: string;
|
||||||
|
docId: string;
|
||||||
}[];
|
}[];
|
||||||
onChange?: (
|
onChange?: (
|
||||||
row: DatabaseRow,
|
row: DatabaseRow,
|
||||||
@@ -184,8 +185,11 @@ export const DocDatabaseBacklinkInfo = ({
|
|||||||
const rows = useLiveData(
|
const rows = useLiveData(
|
||||||
useMemo(
|
useMemo(
|
||||||
() =>
|
() =>
|
||||||
LiveData.from(docDatabaseBacklinks.watchDbBacklinkRows$(doc.id), []),
|
LiveData.from(
|
||||||
[docDatabaseBacklinks, doc.id]
|
docDatabaseBacklinks.watchDbBacklinkRows$(doc.id, defaultOpen),
|
||||||
|
[]
|
||||||
|
),
|
||||||
|
[docDatabaseBacklinks, doc.id, defaultOpen]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -200,8 +204,9 @@ export const DocDatabaseBacklinkInfo = ({
|
|||||||
<DatabaseBacklinkRow
|
<DatabaseBacklinkRow
|
||||||
defaultOpen={defaultOpen?.some(
|
defaultOpen={defaultOpen?.some(
|
||||||
backlink =>
|
backlink =>
|
||||||
backlink.databaseId === databaseBlockId &&
|
backlink.databaseBlockId === databaseBlockId &&
|
||||||
backlink.rowId === rowId
|
backlink.rowId === rowId &&
|
||||||
|
backlink.docId === docId
|
||||||
)}
|
)}
|
||||||
row$={row$}
|
row$={row$}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
|
|||||||
@@ -153,17 +153,6 @@ export class Editor extends Entity {
|
|||||||
if (!isEqual(selector, omit(editorParams, ['mode']))) {
|
if (!isEqual(selector, omit(editorParams, ['mode']))) {
|
||||||
this.setSelector(selector);
|
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 {
|
} finally {
|
||||||
updating = false;
|
updating = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ export type DocReferenceInfo = {
|
|||||||
blockIds?: string[];
|
blockIds?: string[];
|
||||||
elementIds?: string[];
|
elementIds?: string[];
|
||||||
databaseId?: string;
|
databaseId?: string;
|
||||||
|
databaseDocId?: string;
|
||||||
databaseRowId?: string;
|
databaseRowId?: string;
|
||||||
/**
|
/**
|
||||||
* viewport in edgeless mode
|
* viewport in edgeless mode
|
||||||
|
|||||||
@@ -169,8 +169,16 @@ function DocPeekPreviewEditor({
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function DocPeekPreview({ docRef }: { docRef: DocReferenceInfo }) {
|
export function DocPeekPreview({ docRef }: { docRef: DocReferenceInfo }) {
|
||||||
const { docId, blockIds, elementIds, mode, xywh, databaseId, databaseRowId } =
|
const {
|
||||||
docRef;
|
docId,
|
||||||
|
blockIds,
|
||||||
|
elementIds,
|
||||||
|
mode,
|
||||||
|
xywh,
|
||||||
|
databaseId,
|
||||||
|
databaseDocId,
|
||||||
|
databaseRowId,
|
||||||
|
} = docRef;
|
||||||
const { doc, editor, loading } = useEditor(
|
const { doc, editor, loading } = useEditor(
|
||||||
docId,
|
docId,
|
||||||
mode,
|
mode,
|
||||||
@@ -178,8 +186,9 @@ export function DocPeekPreview({ docRef }: { docRef: DocReferenceInfo }) {
|
|||||||
blockIds,
|
blockIds,
|
||||||
elementIds,
|
elementIds,
|
||||||
},
|
},
|
||||||
databaseId && databaseRowId
|
databaseId && databaseRowId && databaseDocId
|
||||||
? {
|
? {
|
||||||
|
docId: databaseDocId,
|
||||||
databaseId,
|
databaseId,
|
||||||
databaseRowId,
|
databaseRowId,
|
||||||
type: 'database',
|
type: 'database',
|
||||||
|
|||||||
@@ -21,4 +21,4 @@
|
|||||||
"ur": 3,
|
"ur": 3,
|
||||||
"zh-Hans": 99,
|
"zh-Hans": 99,
|
||||||
"zh-Hant": 98
|
"zh-Hant": 98
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user