How can I redraw the ITHit Ajax File Browser in an Angular SPA when I've got all the instantiated parts?

111 views Asked by At

For various reasons I will not go into, I have successfully wrapped the ITHit Ajax File browser inside of an Angular Controller, which itself is loaded and wrapped in an Angular-UI-Router UI-View.

All of the settings are configured through preceding service calls (to support a cloud environment with shifty urls), and I've even gotten through all of my CORS (Cross Origin Request) issues, and we've wired in a custom Oath2 implementation on the DAV server. All of this is successfully working with the ITHit File Browser as a pretty centerpiece for our content-browsing implementation.

As of now, when I navigate certain areas, the Angular-ui-router tweaks the Url, the view responds, and the Angular Controller wrapping ITHit responds to the view change, and (without reloading the view) re-fetches the appropriate DAV url with available IT Hit commands ( e.g. SetSelectedFolderAsync )

Here's my (hopefully simple) challenge: when I navigate to certain areas - Angular-UI-router simply reloads the containing UI-View with new content, but when I return - the ITHit Ajax File Browser does not redraw.

Here are some guidelines to my challenge (ignore-able if you offer something I can work with):

  1. I'd prefer to avoid having to "hide" the ITHit container (because it's irrelevant and I don't want to have to manage keeping it up to date as state changes in the view. These changes affect DAV paths). Also I don't want to worry about unnecessary network traffic. I'd really like to let Angular-UI-Router do its thing with the ui-view in which the browser is resting.
  2. I'd like to keep whatever calls need to be made invokable to the Angular Controller (it's managing authentication, path resolution, and contextual settings config - which change as users navigate).
  3. Everything (well most important things) generated by the ITHit solution is stored in a Singleton ('DavBrowserService') - so when I return to the file-browser view, I have everything stored from the initial instantiation including:
    • an instance of ITHit Object
    • the produced instance of the ITHit.Loader
    • an instance of the previously produced AjaxFileBrowser.Controller Object (ITHit.oNS.Controller)
    • an instance of the previously produced WebDavSession Object ( ITHit.oNS.WebDavSession)

With the above in place - I'm hoping that I can simply re-wire these instances back on to the now-returned dom-node ('afb-content-div'). Any help is MUCH appreciated!

1

There are 1 answers

0
RevelationX On

UPDATE: The below "answer" while appearing to be functional - indeed was NOT. However, I have worked around this issue by grabbing the DOM instance and storing it memory when the user navigates away, and re-attaching it after the user has navigated back to the appropriate area. This way all of the ITHit Magic is still tied to the right DOM node, and I don't have to worry about the partial re-instantiation weirdness. Seems to be pretty solid now.


I figured it out!!! It looks like if I re-instantiate the controller by calling:

   var controllerInstance = new ITHit.oNS.Controller( originalSettingsObj );

Everything rewires magically! I've wrapped the above code with some detection for whether the 'afb-content-div' HTML DOM node has children.

After much digging in the code, it looks like this is the argument object returned to as a parameter to ITHitLoader.oninit callback (From the AjaxFileBrowserLoader instance).

Thanks for playing!