Coder Social home page Coder Social logo

Comments (4)

liamcain avatar liamcain commented on August 28, 2024

getContainer is working as intended, it is meant to help distinguish between tabs that are inside a sidebar from tabs in the main area of the window.

Instead of getContainer() what you actually want to access is leaf.parent which doesn't appear to be exposed in the API. To find the parent WorkspaceSplit, you need to traverse up the workspace tree and find the closest split.

const chatViewLeaves = workspace.getLeavesOfType(VIEW_TYPE_NOTE_CHAT)
if (chatViewLeaves.length > 0) {
  const tabGroup = chatViewLeaves[0].parent;
  leaf = workspace.createLeafInParent(tabGroup, 1);
  // ...rest of the view creation logic
}

Note: this code will throw errors in your editor, so you'll need to use @ts-ignore for now

from obsidian-api.

ofalvai avatar ofalvai commented on August 28, 2024

Thank you @liamcain, I tried the suggested snippet, and even though the returned split instance is correct (I double-checked the DOM reference in devtools), the end result is still the same: my custom view is directly attached to the root split without any tab UI. Is it possible that createLeafInParent() can't create tab leaves and it is hardcoded to create a child of a split?

I double-checked the workspace.json structure on disk, and it matches what I see on the UI:

{
  "main": {
    "id": "db68a861fda8a4a5",
    "type": "split",
    "children": [
      {
        "id": "07c59eaad420ce86",
        "type": "leaf",
        "state": {
          "type": "llm-note-chat-view",
          "state": {}
        }
      },
      {
        "id": "1b2c279856192e00",
        "type": "tabs",
        "children": [...]
      }
    ]
}

For the record, I also tried workspace.duplicateLeaf(chatViewLeaves[0], "tab") and it gives the same result.
Edit: nevermind, I made a mistake. duplicateLeaf() does something different: it creates a tab leaf, but in the wrong split leaf, not the one where chatViewLeaves[0] is.

from obsidian-api.

liamcain avatar liamcain commented on August 28, 2024

@ofalvai Oh, sorry. I think I confused myself when writing that code before. You aren't trying to add a tab to the WorkspaceSplit, you're trying to add a tab to the tab group. In that case, its even simpler. I updated my code snippet above to do what you're after.

from obsidian-api.

ofalvai avatar ofalvai commented on August 28, 2024

Oh, that makes sense, thank you. I was so focused for what to do with the parent reference that I didn't see the problem with the while loop 😵‍💫

from obsidian-api.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.