mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
fix: dispose cell controller
This commit is contained in:
parent
96be3c6ebe
commit
60676fdc41
@ -1,14 +1,15 @@
|
|||||||
import { CellIdentifier } from '../../../stores/effects/database/cell/cell_bd_svc';
|
import { CellIdentifier } from '$app/stores/effects/database/cell/cell_bd_svc';
|
||||||
import { CellCache } from '../../../stores/effects/database/cell/cell_cache';
|
import { CellCache } from '$app/stores/effects/database/cell/cell_cache';
|
||||||
import { FieldController } from '../../../stores/effects/database/field/field_controller';
|
import { FieldController } from '$app/stores/effects/database/field/field_controller';
|
||||||
import { CellControllerBuilder } from '../../../stores/effects/database/cell/controller_builder';
|
import { CellControllerBuilder } from '$app/stores/effects/database/cell/controller_builder';
|
||||||
import { DateCellDataPB, SelectOptionCellDataPB, URLCellDataPB } from '../../../../services/backend';
|
import { DateCellDataPB, SelectOptionCellDataPB, URLCellDataPB } from '$app/../services/backend';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
export const useCell = (cellIdentifier: CellIdentifier, cellCache: CellCache, fieldController: FieldController) => {
|
export const useCell = (cellIdentifier: CellIdentifier, cellCache: CellCache, fieldController: FieldController) => {
|
||||||
const [data, setData] = useState<DateCellDataPB | URLCellDataPB | SelectOptionCellDataPB | string | undefined>();
|
const [data, setData] = useState<DateCellDataPB | URLCellDataPB | SelectOptionCellDataPB | string | undefined>();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
if (!cellIdentifier || !cellCache || !fieldController) return;
|
||||||
const builder = new CellControllerBuilder(cellIdentifier, cellCache, fieldController);
|
const builder = new CellControllerBuilder(cellIdentifier, cellCache, fieldController);
|
||||||
const cellController = builder.build();
|
const cellController = builder.build();
|
||||||
cellController.subscribeChanged({
|
cellController.subscribeChanged({
|
||||||
@ -21,10 +22,9 @@ export const useCell = (cellIdentifier: CellIdentifier, cellCache: CellCache, fi
|
|||||||
void cellController.getCellData();
|
void cellController.getCellData();
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
// dispose is causing an error
|
|
||||||
void cellController.dispose();
|
void cellController.dispose();
|
||||||
};
|
};
|
||||||
}, []);
|
}, [cellIdentifier, cellCache, fieldController]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
data,
|
data,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { DatabaseController } from '../../../stores/effects/database/database_controller';
|
import { DatabaseController } from '$app/stores/effects/database/database_controller';
|
||||||
import { RowController } from '../../../stores/effects/database/row/row_controller';
|
import { RowController } from '$app/stores/effects/database/row/row_controller';
|
||||||
import { RowInfo } from '../../../stores/effects/database/row/row_cache';
|
import { RowInfo } from '$app/stores/effects/database/row/row_cache';
|
||||||
import { CellIdentifier } from '../../../stores/effects/database/cell/cell_bd_svc';
|
import { CellIdentifier } from '$app/stores/effects/database/cell/cell_bd_svc';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
export const useRow = (viewId: string, databaseController: DatabaseController, rowInfo: RowInfo) => {
|
export const useRow = (viewId: string, databaseController: DatabaseController, rowInfo: RowInfo) => {
|
||||||
@ -9,6 +9,7 @@ export const useRow = (viewId: string, databaseController: DatabaseController, r
|
|||||||
const [rowController, setRowController] = useState<RowController>();
|
const [rowController, setRowController] = useState<RowController>();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
if (!databaseController || !rowInfo) return;
|
||||||
const rowCache = databaseController.databaseViewCache.getRowCache();
|
const rowCache = databaseController.databaseViewCache.getRowCache();
|
||||||
const fieldController = databaseController.fieldController;
|
const fieldController = databaseController.fieldController;
|
||||||
const c = new RowController(rowInfo, fieldController, rowCache);
|
const c = new RowController(rowInfo, fieldController, rowCache);
|
||||||
@ -17,7 +18,7 @@ export const useRow = (viewId: string, databaseController: DatabaseController, r
|
|||||||
return () => {
|
return () => {
|
||||||
// dispose row controller in future
|
// dispose row controller in future
|
||||||
};
|
};
|
||||||
}, []);
|
}, [databaseController, rowInfo]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!rowController) return;
|
if (!rowController) return;
|
||||||
|
@ -108,6 +108,7 @@ export class CellController<T, D> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
dispose = async () => {
|
dispose = async () => {
|
||||||
|
this.cellDataNotifier.unsubscribe();
|
||||||
await this.cellObserver.unsubscribe();
|
await this.cellObserver.unsubscribe();
|
||||||
await this.fieldNotifier.unsubscribe();
|
await this.fieldNotifier.unsubscribe();
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user