(core) Filter out pages for hidden views from the page list.

Summary:
- Filters out hidden pages from docModel.allPagesList (used for knowing default page, and for search iteration).
- Filters out hidden pages from TreeModel (uses raw tableData, so has a different way to filter).

Test Plan: WIP

Reviewers: georgegevoian

Reviewed By: georgegevoian

Differential Revision: https://phab.getgrist.com/D2996
This commit is contained in:
Dmitry S
2021-08-27 13:25:20 -04:00
parent 90d1340b64
commit 3edb3a6826
7 changed files with 51 additions and 30 deletions

View File

@@ -4,22 +4,36 @@ import { GristDoc } from "app/client/components/GristDoc";
import { PageRec } from "app/client/models/DocModel";
import { urlState } from "app/client/models/gristUrlState";
import * as MetaTableModel from "app/client/models/MetaTableModel";
import { find as findInTree, fromTableData, TreeItemRecord } from "app/client/models/TreeModel";
import { find as findInTree, fromTableData, TreeItemRecord, TreeRecord,
TreeTableData} from "app/client/models/TreeModel";
import { TreeViewComponent } from "app/client/ui/TreeViewComponent";
import { confirmModal } from 'app/client/ui2018/modals';
import { buildPageDom, PageActions } from "app/client/ui2018/pages";
import { mod } from 'app/common/gutil';
import { Computed, Disposable, dom, observable, Observable } from "grainjs";
import { Computed, Disposable, dom, fromKo, observable, Observable } from "grainjs";
// build dom for the tree view of pages
export function buildPagesDom(owner: Disposable, activeDoc: GristDoc, isOpen: Observable<boolean>) {
const pagesTable = activeDoc.docModel.pages;
const buildDom = buildDomFromTable.bind(null, pagesTable, activeDoc);
const records = Computed.create<TreeRecord[]>(owner, (use) =>
use(activeDoc.docModel.visibleDocPages).map(page => ({
id: page.getRowId(),
indentation: use(page.indentation),
pagePos: use(page.pagePos),
viewRef: use(page.viewRef),
}))
);
const getTreeTableData = (): TreeTableData => ({
getRecords: () => records.get(),
sendTableActions: (...args) => pagesTable.tableData.sendTableActions(...args),
});
// create the model and keep in sync with the table
const model = observable(fromTableData(pagesTable.tableData, buildDom));
owner.autoDispose(pagesTable.tableData.tableActionEmitter.addListener(() => {
model.set(fromTableData(pagesTable.tableData, buildDom, model.get()));
const model = observable(fromTableData(getTreeTableData(), buildDom));
owner.autoDispose(records.addListener(() => {
model.set(fromTableData(getTreeTableData(), buildDom, model.get()));
}));
// create a computed that reads the selected page from the url and return the corresponding item
@@ -69,15 +83,7 @@ function buildDomFromTable(pagesTable: MetaTableModel<PageRec>, activeDoc: Grist
actions.isRemoveDisabled = () => (docModel.allTables.all().length <= 1);
}
const maybeHiddenPageName = Computed.create(activeDoc, (use) => {
const name = use(pageName);
if (name === 'GristDocTour' && !activeDoc.showDocTourTable) {
return '';
}
return name;
});
return buildPageDom(maybeHiddenPageName, actions, urlState().setLinkUrl({docPage: viewId}));
return buildPageDom(fromKo(pageName), actions, urlState().setLinkUrl({docPage: viewId}));
}
// Select another page in cyclic ordering of pages. Order is downard if given a positive `delta`,