ImageAndTextWebComponent.ets 4.43 KB
import {
  Action,
  ContentDetailDTO,
  H5ReceiveDataExtraBean,
  H5ReceiveDataJsonBean,
  H5ReceiveDetailBean,
  ResponseBean
} from 'wdBean';
import { Logger, SPHelper, NetworkUtil, DisplayUtils } from 'wdKit';
import { SpConstants } from 'wdConstant';
import { WdWebLocalComponent } from 'wdWebComponent';
import { NativeCallH5Type } from 'wdWebComponent/src/main/ets/pages/NativeCallH5Type';
import { BridgeWebViewControl } from 'wdJsBridge/Index';

const TAG: string = 'ImageAndTextWebComponent'
@Component
export struct ImageAndTextWebComponent {
  action: Action = {} as Action
  @State reload: number = 0;
  @Link isPageEnd: boolean
  @Prop @Watch('onDetailDataUpdated') contentDetailData: ContentDetailDTO [] = [] as ContentDetailDTO []
  webviewControl: BridgeWebViewControl = new BridgeWebViewControl()
  private h5ReceiveAppData: H5ReceiveDetailBean = { dataSource: '2' } as H5ReceiveDetailBean
  private webPrepared = false;
  private dataPrepared = false;
  async onDetailDataUpdated() {
    if (this.action) {
      let contentId: string = ''
      let contentType: string = ''
      let topicId: string = ''
      let channelId: string = ''
      let compId: string = ''
      let sourcePage: string = '5'
      let creatorId = await SPHelper.default.get(SpConstants.USER_CREATOR_ID, '') || ''
      let isLogin = await SPHelper.default.get(SpConstants.USER_STATUS, '') || '0'
      let loadImageOnlyWifiSwitch = await SPHelper.default.get(SpConstants.SETTING_WIFI_IMAGE_SWITCH, '') || false
      if (this.action.params) {
        if (this.action.params.contentID) {
          contentId = this.action.params?.contentID
        }
        if (this.action.params.extra) {
          if (this.action.params.extra.contentType) {
            contentType = this.action.params.extra.contentType
          }
          if (this.action.params.extra.topicId) {
            topicId = this.action.params.extra.topicId
          }
          if (this.action.params.extra.channelId) {
            channelId = this.action.params.extra.channelId
          }
          if (this.action.params.extra.compId) {
            compId = this.action.params.extra.compId
          }
          if (this.action.params.extra.sourcePage) {
            sourcePage = this.action.params.extra.sourcePage
          }
        }

      }

      // TODO 对接user信息、登录情况
      let h5ReceiveDataExtraBean: H5ReceiveDataExtraBean = {
        creatorId: creatorId,
        cnsTraceId: '',
        isLogin: isLogin,
        loadImageOnlyWifiSwitch: loadImageOnlyWifiSwitch ? '1' : '2',
        networkStatus: Number(NetworkUtil.getNetworkType()),
        darkMode: 'light',
        fontSizes: 'normalsize'

      } as H5ReceiveDataExtraBean
      let h5ReceiveDataJsonBean: H5ReceiveDataJsonBean = {
        contentId: contentId,
        contentType: contentType
      } as H5ReceiveDataJsonBean
      h5ReceiveDataJsonBean.topicId = topicId
      h5ReceiveDataJsonBean.channelId = channelId
      h5ReceiveDataJsonBean.compId = compId
      h5ReceiveDataJsonBean.sourcePage = sourcePage
      h5ReceiveDataJsonBean.netError = '0'
      let response: ResponseBean = {} as ResponseBean
      response.data = this.contentDetailData
      response.code = 200
      response.success = true
      h5ReceiveDataJsonBean.responseMap = response
      this.h5ReceiveAppData.dataJson = h5ReceiveDataJsonBean
      this.h5ReceiveAppData.dataExt = h5ReceiveDataExtraBean
      this.dataPrepared = true
      this.trySendData2H5()
    }

  }

  build() {
    Column() {
      WdWebLocalComponent({
        webviewControl: this.webviewControl,
        reload:this.reload,
        webResource: $rawfile('apph5/index.html'),
        backVisibility: false,
        onWebPrepared: this.onWebPrepared.bind(this),
        isPageEnd: $isPageEnd
      })
    }
  }

  private trySendData2H5() {
    if (!this.webPrepared || !this.dataPrepared) {
      return
    }
    // 数据、web组件,都准备好了,开始塞详情数据
    this.sendContentData2H5(this.h5ReceiveAppData)
  }

  private onWebPrepared() {
    this.webPrepared = true
    this.trySendData2H5()
  }

  private sendContentData2H5(h5ReceiveAppData: H5ReceiveDetailBean) {
    Logger.debug('ImageAndTextWebComponent', 'jsCall_receiveAppData',JSON.stringify(h5ReceiveAppData));
    this.webviewControl.callHandle(NativeCallH5Type.jsCall_receiveAppData,
      JSON.stringify(h5ReceiveAppData), (data: string) => {
        Logger.debug('ImageAndTextWebComponent', "from js data = " + data);
      })
  }
}