1dcf1cfa-fd4e-432a-98af-b4eb403033a3.js.map 6.25 KB
{"version":3,"sources":["assets/script/game/ui/baseview/impl/ListViewImpl.ts"],"names":[],"mappings":"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","file":"","sourceRoot":"/","sourcesContent":["\nimport { delay, shallowEqual } from \"simba-utils\";\nimport { ListItemProps, ListViewProps, ListView } from \"../ListView\";\nimport { CCPureView, CCPureSubview } from \"../../../../common/classbase/CCViewBase\";\nimport { DummyLayout, DummyScrollView } from \"../../../../common/CCDummyObjects\";\n\nconst { ccclass, property } = cc._decorator;\n\n@ccclass\nexport abstract class ListViewImpl<I extends ListItemProps, T extends ListViewProps<I>> extends CCPureView<T> implements ListView {\n    //#region editor bindings\n    @property(cc.Layout)\n    protected contentLayout: cc.Layout = DummyLayout;\n    @property(cc.ScrollView)\n    protected scrollView: cc.ScrollView = DummyScrollView;\n    //#endregion\n\n    protected _refreshing = false;\n\n    protected _itemViews: { [key: string]: CCPureView<I> & { index: number } } = {};\n\n    private _viewCache: CCPureView<I>[] = [];\n\n    protected abstract createListItemView(index: number): Promise<CCPureView<I>>;\n\n    onLoad() {\n        // console.log(\"ListViewImpl onLoad\", this.scrollView);\n    }\n\n    //#region base class overrides\n    onPropsReceive() {\n        (this._props as any).items = [...this._props.items];\n        if (this._prevProps) {\n            if (!shallowEqual(this._props.items, this._prevProps.items)) {\n                this.refreshList(this._props.items);\n            }\n        }\n    }\n\n    onPropsLoad(props: T) {\n        // super.onPropsLoad(props);\n        this.refreshList(props.items);\n    }\n    //#endregion\n\n    //#region interface impl\n    scrollToTop() {\n        this.scrollView.scrollToTop();\n    }\n\n    scrollToBottom(animate = false) {\n        if (this.contentLayout.node.height > this.scrollView.node.height) {\n            this.scrollView.scrollToBottom(animate ? 0.3 : undefined);\n        }\n    }\n    //#endregion\n\n    onItemClick = (key: string) => {\n        return () => {\n            if (this._props.onItemClick) {\n                this._props.onItemClick(key);\n            }\n        }\n    }\n\n    refreshList = async (list: I[]) => {\n        while (this._refreshing) {\n            await delay(0.5);\n        }\n        this._refreshing = true;\n        let allKeys = new Set(Object.keys(this._itemViews));\n        for (let i = 0; i < list.length; i++) {\n            let view = this._itemViews[list[i].key];\n            allKeys.delete(list[i].key);\n            if (!view) {\n                view = (this._viewCache.pop() || await this.createListItemView(i)) as (CCPureView<I> & { index: number });\n                view.index = i;\n                view.node.parent = this.contentLayout.node;\n                view.node.setSiblingIndex(i);\n                this._itemViews[list[i].key] = view;\n            } else if (view.index !== i) {\n                view.node.setSiblingIndex(i);\n                view.index = i;\n            }\n            view.setProps({ ...list[i], onClick: this.onItemClick(list[i].key) });\n        }\n        for (let key of allKeys) {\n            let view = this._itemViews[key];\n            view.node.removeFromParent(false);\n            delete this._itemViews[key];\n            this._viewCache.push(view);\n        }\n        this._refreshing = false;\n        this.onRefreshListEnd();\n    }\n\n    onRefreshListEnd() { }\n}\n"]}