tree: getState()

in web/web/src/lib/store/metalakes/index.js [1242:1353]


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

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

    return { models, page, init }
  }
)

export const getModelDetails = createAsyncThunk(
  'appMetalakes/getModelDetails',
  async ({ init, metalake, catalog, schema, model }, { getState, dispatch }) => {
    const [err, res] = await to(getModelDetailsApi({ metalake, catalog, schema, model }))

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

    const { model: resModel } = res

    return resModel
  }
)

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

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

    const { model: modelItem } = res

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

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

    return modelData
  }
)

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

    return res.model
  }
)

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

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

    dispatch(fetchModels({ metalake, catalog, type, schema, page: 'models', init: true }))

    return res
  }
)

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

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

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

    const { versions = [] } = res

    const versionsData = versions.map(version => {
      return {