fix(editor): view recorded in storage may not exist (#9788)
fix: BS-2415
This commit is contained in:
@@ -473,7 +473,7 @@ export class DatabaseBlockDataSource extends DataSourceBase {
|
|||||||
return duplicateView(this._model, id);
|
return duplicateView(this._model, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
viewDataGet(viewId: string): DataViewDataType {
|
viewDataGet(viewId: string): DataViewDataType | undefined {
|
||||||
return this.viewDataList$.value.find(data => data.id === viewId)!;
|
return this.viewDataList$.value.find(data => data.id === viewId)!;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,8 +499,11 @@ export class DatabaseBlockDataSource extends DataSourceBase {
|
|||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
viewMetaGetById(viewId: string): ViewMeta {
|
viewMetaGetById(viewId: string): ViewMeta | undefined {
|
||||||
const view = this.viewDataGet(viewId);
|
const view = this.viewDataGet(viewId);
|
||||||
|
if (!view) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
return this.viewMetaGet(view.mode);
|
return this.viewMetaGet(view.mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -333,7 +333,12 @@ export class DatabaseBlockComponent extends CaptionedBlockComponent<DatabaseBloc
|
|||||||
this._dataSource = new DatabaseBlockDataSource(this.model);
|
this._dataSource = new DatabaseBlockDataSource(this.model);
|
||||||
this._dataSource.contextSet(HostContextKey, this.host);
|
this._dataSource.contextSet(HostContextKey, this.host);
|
||||||
const id = currentViewStorage.getCurrentView(this.model.id);
|
const id = currentViewStorage.getCurrentView(this.model.id);
|
||||||
if (id) {
|
if (id && this.dataSource.viewManager.viewGet(id)) {
|
||||||
|
console.log(
|
||||||
|
'set current view',
|
||||||
|
id,
|
||||||
|
this._dataSource.viewManager.viewGet(id)
|
||||||
|
);
|
||||||
this.dataSource.viewManager.setCurrentView(id);
|
this.dataSource.viewManager.setCurrentView(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ export interface DataSource {
|
|||||||
viewMetaGet(type: string): ViewMeta;
|
viewMetaGet(type: string): ViewMeta;
|
||||||
viewMetaGet$(type: string): ReadonlySignal<ViewMeta | undefined>;
|
viewMetaGet$(type: string): ReadonlySignal<ViewMeta | undefined>;
|
||||||
|
|
||||||
viewMetaGetById(viewId: string): ViewMeta;
|
viewMetaGetById(viewId: string): ViewMeta | undefined;
|
||||||
viewMetaGetById$(viewId: string): ReadonlySignal<ViewMeta | undefined>;
|
viewMetaGetById$(viewId: string): ReadonlySignal<ViewMeta | undefined>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,7 +217,7 @@ export abstract class DataSourceBase implements DataSource {
|
|||||||
|
|
||||||
abstract viewDataDuplicate(id: string): string;
|
abstract viewDataDuplicate(id: string): string;
|
||||||
|
|
||||||
abstract viewDataGet(viewId: string): DataViewDataType;
|
abstract viewDataGet(viewId: string): DataViewDataType | undefined;
|
||||||
|
|
||||||
viewDataGet$(viewId: string): ReadonlySignal<DataViewDataType | undefined> {
|
viewDataGet$(viewId: string): ReadonlySignal<DataViewDataType | undefined> {
|
||||||
return computed(() => this.viewDataGet(viewId));
|
return computed(() => this.viewDataGet(viewId));
|
||||||
@@ -236,7 +236,7 @@ export abstract class DataSourceBase implements DataSource {
|
|||||||
return computed(() => this.viewMetaGet(type));
|
return computed(() => this.viewMetaGet(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract viewMetaGetById(viewId: string): ViewMeta;
|
abstract viewMetaGetById(viewId: string): ViewMeta | undefined;
|
||||||
|
|
||||||
viewMetaGetById$(viewId: string): ReadonlySignal<ViewMeta | undefined> {
|
viewMetaGetById$(viewId: string): ReadonlySignal<ViewMeta | undefined> {
|
||||||
return computed(() => this.viewMetaGetById(viewId));
|
return computed(() => this.viewMetaGetById(viewId));
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export interface ViewManager {
|
|||||||
|
|
||||||
views$: ReadonlySignal<string[]>;
|
views$: ReadonlySignal<string[]>;
|
||||||
|
|
||||||
viewGet(id: string): SingleView;
|
viewGet(id: string): SingleView | undefined;
|
||||||
|
|
||||||
viewAdd(type: DataViewMode): string;
|
viewAdd(type: DataViewMode): string;
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ export class ViewManagerBase implements ViewManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
viewChangeType(id: string, type: string): void {
|
viewChangeType(id: string, type: string): void {
|
||||||
const from = this.viewGet(id).type;
|
const from = this.viewGet(id)?.type;
|
||||||
const meta = this.dataSource.viewMetaGet(type);
|
const meta = this.dataSource.viewMetaGet(type);
|
||||||
this.dataSource.viewDataUpdate(id, old => {
|
this.dataSource.viewDataUpdate(id, old => {
|
||||||
let data = {
|
let data = {
|
||||||
@@ -122,8 +122,9 @@ export class ViewManagerBase implements ViewManager {
|
|||||||
this.setCurrentView(newId);
|
this.setCurrentView(newId);
|
||||||
}
|
}
|
||||||
|
|
||||||
viewGet(id: string): SingleView {
|
viewGet(id: string): SingleView | undefined {
|
||||||
const meta = this.dataSource.viewMetaGetById(id);
|
const meta = this.dataSource.viewMetaGetById(id);
|
||||||
|
if (!meta) return;
|
||||||
return new meta.model.dataViewManager(this, id);
|
return new meta.model.dataViewManager(this, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ export class DataViewHeaderViews extends WidgetBase {
|
|||||||
popupTargetFromElement(event.currentTarget as HTMLElement),
|
popupTargetFromElement(event.currentTarget as HTMLElement),
|
||||||
[
|
[
|
||||||
menu.group({
|
menu.group({
|
||||||
items: views.map(id => {
|
items: views.flatMap(id => {
|
||||||
const openViewOption = (event: MouseEvent) => {
|
const openViewOption = (event: MouseEvent) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
this.openViewOption(
|
this.openViewOption(
|
||||||
@@ -105,9 +105,12 @@ export class DataViewHeaderViews extends WidgetBase {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
const view = this.viewManager.viewGet(id);
|
const view = this.viewManager.viewGet(id);
|
||||||
|
if (!view) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
return menu.action({
|
return menu.action({
|
||||||
prefix: html`<uni-lit
|
prefix: html`<uni-lit
|
||||||
.uni=${this.getRenderer(id).icon}
|
.uni=${this.getRenderer(id)?.icon}
|
||||||
></uni-lit>`,
|
></uni-lit>`,
|
||||||
name: view.name$.value ?? '',
|
name: view.name$.value ?? '',
|
||||||
label: () => html`${view.name$.value}`,
|
label: () => html`${view.name$.value}`,
|
||||||
@@ -262,7 +265,7 @@ export class DataViewHeaderViews extends WidgetBase {
|
|||||||
style="margin-right: 4px;"
|
style="margin-right: 4px;"
|
||||||
@click="${(event: MouseEvent) => this._clickView(event, id)}"
|
@click="${(event: MouseEvent) => this._clickView(event, id)}"
|
||||||
>
|
>
|
||||||
<uni-lit class="icon" .uni="${this.getRenderer(id).icon}"></uni-lit>
|
<uni-lit class="icon" .uni="${this.getRenderer(id)?.icon}"></uni-lit>
|
||||||
<div class="name">${view?.name}</div>
|
<div class="name">${view?.name}</div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
@@ -274,7 +277,7 @@ export class DataViewHeaderViews extends WidgetBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private getRenderer(viewId: string) {
|
private getRenderer(viewId: string) {
|
||||||
return this.dataSource.viewMetaGetById(viewId).renderer;
|
return this.dataSource.viewMetaGetById(viewId)?.renderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
_clickView(event: MouseEvent, id: string) {
|
_clickView(event: MouseEvent, id: string) {
|
||||||
|
|||||||
Reference in New Issue
Block a user