|
|
|
@ -1,4 +1,5 @@
|
|
|
|
|
import { Button, Checkbox, Intent } from "@blueprintjs/core";
|
|
|
|
|
import { action } from "mobx";
|
|
|
|
|
import { observer } from "mobx-react";
|
|
|
|
|
import React from "react";
|
|
|
|
|
import { AppConfirm } from "../../../UI/Components/Common/Confirm";
|
|
|
|
@ -9,12 +10,80 @@ import { KJLMaterialMapData } from "./KJLMaterialMapData";
|
|
|
|
|
export class KJLMaterialMap extends React.Component<{ store: KJLImportConfigStore; }>
|
|
|
|
|
{
|
|
|
|
|
private scrollEl = React.createRef<HTMLDivElement>();
|
|
|
|
|
private timer = null;
|
|
|
|
|
materialListRef = React.createRef<HTMLDivElement>();
|
|
|
|
|
timer = null;
|
|
|
|
|
componentWillUnmount(): void
|
|
|
|
|
{
|
|
|
|
|
this.props.store.materialMap.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
componentDidMount(): void
|
|
|
|
|
{
|
|
|
|
|
this.LoadMaterialInfo();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
componentDidUpdate(prevProps: Readonly<{ store: KJLImportConfigStore; }>, prevState: Readonly<{}>, snapshot?: any): void
|
|
|
|
|
{
|
|
|
|
|
this.LoadMaterialInfo();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async loadPromise(material)
|
|
|
|
|
{
|
|
|
|
|
const { store } = this.props;
|
|
|
|
|
|
|
|
|
|
if (material.materialName != "" || !material.id) return;
|
|
|
|
|
|
|
|
|
|
if (store.materialMap.has(material.id))
|
|
|
|
|
{
|
|
|
|
|
let materialInfo = store.materialMap.get(material.id);
|
|
|
|
|
if (materialInfo.isLoading)
|
|
|
|
|
{
|
|
|
|
|
store.materialLoadList.add(material);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
material.materialName = materialInfo.materialName;
|
|
|
|
|
material.url = materialInfo.url;
|
|
|
|
|
material.isRender = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
let materialInfo = { materialName: "", url: "", isLoading: true };
|
|
|
|
|
store.materialMap.set(material.id, materialInfo);
|
|
|
|
|
|
|
|
|
|
let info = await store.GetMaterialInfo(material.id);
|
|
|
|
|
|
|
|
|
|
materialInfo.materialName = info.materialName;
|
|
|
|
|
materialInfo.url = info.url;
|
|
|
|
|
|
|
|
|
|
material.materialName = materialInfo.materialName;
|
|
|
|
|
material.url = materialInfo.url;
|
|
|
|
|
material.isRender = true;
|
|
|
|
|
|
|
|
|
|
materialInfo.isLoading = false;
|
|
|
|
|
store.updataMaterialList(material.id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@action
|
|
|
|
|
LoadMaterialInfo = async () =>
|
|
|
|
|
{
|
|
|
|
|
let store = this.props.store;
|
|
|
|
|
let scrollElement = this.scrollEl.current;
|
|
|
|
|
let mtls = scrollElement.getElementsByClassName("mtl-list-info");
|
|
|
|
|
for (let i = 0; i < mtls.length; i++)
|
|
|
|
|
{
|
|
|
|
|
const el = mtls[i] as HTMLDivElement;
|
|
|
|
|
if (el.offsetTop <= scrollElement.scrollTop + scrollElement.offsetTop + scrollElement.offsetHeight
|
|
|
|
|
&& el.offsetTop >= scrollElement.scrollTop + scrollElement.offsetTop - el.offsetHeight
|
|
|
|
|
)
|
|
|
|
|
{
|
|
|
|
|
this.loadPromise(store.materialList[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
render()
|
|
|
|
|
{
|
|
|
|
|
let store = this.props.store;
|
|
|
|
@ -22,6 +91,7 @@ export class KJLMaterialMap extends React.Component<{ store: KJLImportConfigStor
|
|
|
|
|
<div className="KJLMaterialMap frame">
|
|
|
|
|
<div>酷家乐材质映射</div>
|
|
|
|
|
<div
|
|
|
|
|
className="material-scroll"
|
|
|
|
|
ref={this.scrollEl}
|
|
|
|
|
onScroll={(e) =>
|
|
|
|
|
{
|
|
|
|
@ -31,14 +101,9 @@ export class KJLMaterialMap extends React.Component<{ store: KJLImportConfigStor
|
|
|
|
|
}
|
|
|
|
|
this.timer = setTimeout(() =>
|
|
|
|
|
{
|
|
|
|
|
if (this.scrollEl.current)
|
|
|
|
|
{
|
|
|
|
|
let scrollTop = this.scrollEl.current.scrollTop;
|
|
|
|
|
let index = Math.max(Math.floor((scrollTop - 30) / 52) - 1, 0);
|
|
|
|
|
this.props.store.AsyncLoadMaterials(index);
|
|
|
|
|
}
|
|
|
|
|
this.LoadMaterialInfo();
|
|
|
|
|
this.timer = null;
|
|
|
|
|
}, 100);
|
|
|
|
|
}, 200);
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<div className="info-header">
|
|
|
|
@ -55,7 +120,7 @@ export class KJLMaterialMap extends React.Component<{ store: KJLImportConfigStor
|
|
|
|
|
<div>引用材质</div>
|
|
|
|
|
<div>操作</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<div ref={this.materialListRef}>
|
|
|
|
|
{
|
|
|
|
|
store.materialList.map((material, i) =>
|
|
|
|
|
<KJLMaterialMapData
|
|
|
|
@ -73,7 +138,7 @@ export class KJLMaterialMap extends React.Component<{ store: KJLImportConfigStor
|
|
|
|
|
{
|
|
|
|
|
store.m_Option.materials.push({ kjlName: "", id: "" });
|
|
|
|
|
let index = store.materialList.length;
|
|
|
|
|
store.materialList.push({ keyIndex: index, kjlName: "", materialName: "", url: "", isSelect: store.selectAll ? true : false, isRender: true });
|
|
|
|
|
store.materialList.push({ keyIndex: index, kjlName: "", id: "", materialName: "", url: "", isSelect: store.selectAll ? true : false, isRender: true });
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
</Button>
|
|
|
|
|