tree: getState()

in web/web/src/lib/store/metalakes/index.js [1094:1219]


          tree: getState().metalakes.metalakeTree
        })
      )
    }

    dispatch(
      setExpandedNodes([
        `{{${metalake}}}`,
        `{{${metalake}}}{{${catalog}}}{{${'messaging'}}}`,
        `{{${metalake}}}{{${catalog}}}{{${'messaging'}}}{{${schema}}}`
      ])
    )

    return { topics, page, init }
  }
)

export const getTopicDetails = createAsyncThunk(
  'appMetalakes/getTopicDetails',
  async ({ init, metalake, catalog, schema, topic }, { getState, dispatch }) => {
    dispatch(resetTableData())
    if (init) {
      dispatch(setTableLoading(true))
    }
    const [err, res] = await to(getTopicDetailsApi({ metalake, catalog, schema, topic }))
    dispatch(setTableLoading(false))

    if (err || !res) {
      dispatch(resetTableData())
      throw new Error(err)
    }

    const { topic: resTopic } = res

    dispatch(
      setExpandedNodes([
        `{{${metalake}}}`,
        `{{${metalake}}}{{${catalog}}}{{${'messaging'}}}`,
        `{{${metalake}}}{{${catalog}}}{{${'messaging'}}}{{${schema}}}`
      ])
    )

    return resTopic
  }
)

export const createTopic = createAsyncThunk(
  'appMetalakes/createTopic',
  async ({ data, metalake, catalog, type, schema }, { dispatch }) => {
    dispatch(setTableLoading(true))
    const [err, res] = await to(createTopicApi({ data, metalake, catalog, schema }))
    dispatch(setTableLoading(false))

    if (err || !res) {
      return { err: true }
    }

    const { topic: topicItem } = res

    const topicData = {
      ...topicItem,
      node: 'topic',
      id: `{{${metalake}}}{{${catalog}}}{{${type}}}{{${schema}}}{{${topicItem.name}}}`,
      key: `{{${metalake}}}{{${catalog}}}{{${type}}}{{${schema}}}{{${topicItem.name}}}`,
      path: `?${new URLSearchParams({ metalake, catalog, type, schema, topic: topicItem.name }).toString()}`,
      name: topicItem.name,
      title: topicItem.name,
      tables: [],
      children: []
    }

    dispatch(fetchTopics({ metalake, catalog, schema, type, init: true }))

    return topicData
  }
)

export const updateTopic = createAsyncThunk(
  'appMetalakes/updateTopic',
  async ({ metalake, catalog, type, schema, topic, data }, { dispatch }) => {
    const [err, res] = await to(updateTopicApi({ metalake, catalog, schema, topic, data }))
    if (err || !res) {
      return { err: true }
    }
    dispatch(fetchTopics({ metalake, catalog, type, schema, init: true }))

    return res.topic
  }
)

export const deleteTopic = createAsyncThunk(
  'appMetalakes/deleteTopic',
  async ({ metalake, catalog, type, schema, topic }, { dispatch }) => {
    dispatch(setTableLoading(true))
    const [err, res] = await to(deleteTopicApi({ metalake, catalog, schema, topic }))
    dispatch(setTableLoading(false))

    if (err || !res) {
      throw new Error(err)
    }

    dispatch(fetchTopics({ metalake, catalog, type, schema, page: 'topics', init: true }))

    return res
  }
)

export const fetchModels = createAsyncThunk(
  'appMetalakes/fetchModels',
  async ({ init, page, metalake, catalog, schema }, { getState, dispatch }) => {
    if (init) {
      dispatch(setTableLoading(true))
    }

    const [err, res] = await to(getModelsApi({ metalake, catalog, schema }))
    dispatch(setTableLoading(false))

    if (init && (err || !res)) {
      dispatch(resetTableData())
      throw new Error(err)
    }

    const { identifiers = [] } = res

    const models = identifiers.map(model => {
      return {