export function getTableTree()

in kystudio/src/components/common/DataSourceModal/SourceHive/handler.js [69:123]


export function getTableTree (database, res, isTableReset, selectTablesNames) {
  const newTables = res.tables.map(table => ({
    id: `${database.id}.${table.table_name}`,
    label: table.table_name,
    type: 'table',
    database: database.id,
    isSelected: table.loaded || database.isSelected || table.table_name && selectTablesNames && selectTablesNames.includes(`${database.id}.${table.table_name}`),
    clickable: !table.loaded && !database.isSelected && !table.existed,
    isLoaded: table.loaded,
    isExistedName: table.existed,
    render: (h, { node, data, store }) => {
      const isChecked = !data.isLoaded && data.isSelected && !table.existed
      const isLoaded = data.isLoaded
      const isExistedName = data.isExistedName
      const isAllTableSelected = database.children.filter(item => item.type !== 'isMore').every(item => item.isLoaded)
      const tableClassNames = [
        'table',
        ...(database.isSelected && !isAllTableSelected ? ['parent-selected'] : []),
        ...(!data.clickable ? ['disabled'] : []),
        ...(isLoaded ? ['synced'] : []),
        ...(isExistedName ? ['existedName'] : [])
      ]
      const currentId = `table-load-${data.id}`
      setTimeout(() => {
        const currentEl = document.getElementById(currentId)
        const parentEl = currentEl && currentEl.parentNode.parentNode.parentNode
        if (parentEl) {
          parentEl.style.cssText = `background-color: ${!data.clickable ? 'transparent' : null}; cursor: ${!data.clickable ? 'not-allowed' : null};`
        }
      }, 100)
      const itemClassName = isLoaded || isExistedName ? 'is-synced' : ''
      return (
        <div class={itemClassName}>
          <div class={tableClassNames} id={currentId}>
            { isChecked ? (
              <span class="el-icon-ksd-good_health"></span>
            ) : null }
            <span>{data.label}</span>
          </div>
          { isLoaded ? (
            <span class="label-synced">{this.$t('synced')}</span>
          ) : null }
          { isExistedName ? (
            <span class="label-synced">{this.$t('existedName')}</span>
          ) : null }
        </div>
      )
    }
  }))
  database.children = isTableReset
    ? newTables
    : database.children.concat(newTables)
  database.isMore = res.size > getChildrenCount(database)
  database.isLoading = false
}