1dcf1cfa-fd4e-432a-98af-b4eb403033a3.js.map
6.32 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"]}