Skip to content

Decisions log

Johann Levesque edited this page Apr 24, 2024 · 9 revisions

Decisions log for GeoView project

Framework vs Application

We can access layer - class - like: cgpv.api.maps['mapWM1'].layer.geoviewLayers.esriFeatureLYR4.setVisible(false).

We should have class event in abstract Geoview Layer to listen on ... visible, add, remove, opacity, ...... these events are listened in the layer-set/layerApi and propagate to UI React Components.

If the layer is registered in the layer set, it will cascade events in store. If not, it will only be on layer on the map.

Steps

UI store state action, call the Processor to do the action on class. Class emit event for layer set to catch. If layer registered, calls layerEventProcessor setterAction (store state is updated).

UI -> setVisible(false) -> store action (setVisibe) -> LayerEventProcessor api.layers....

Layer Class, layers function (ol set visiblility), emit event ... Now the action is effective on layer itself, state is not updated. The same way as if dev does it directly on the layer. Now we need to synch layer and store....

Layer Set catch event (application level) - LayerEventProcessor setter action for store state to have the same value as UI. Both in synch updated.

A dev can go to api.layers.... and if layer is registered, it will by synch with UI.

Store - Zustand

OpenLayer integration

  • 2023-10-18 The OpenLayer map element is stored in our Zustand store as an attribute of mapState. A decision has been made to reuse this object within Geoview core component and access OpenLayers map function directly to minimize the overlap and complexity for maintenance.
  • 2023-10-18 At the moment some OpenLayers import are part of Geoview core component like for location.tsx in the nav-bar component. The use of OpenLayer import inside core component breaks the rule of encapsulation but there is minimal impact at this time. It has been decided to keep them for now and reevaluate at a later time before launch of version 1.0 if we have time to fix this.

Asynchronous viewer behavior

  • 2023-10-20 Loading layers onto the map is a highly asynchronous process. To prevent this complexity from falling into the hands of users, the viewer uses two mechanisms to signal to users that this loading phase is complete and that the map layers can be processed synchronously. The first is a callback routine called cgpv.init and the other is an event (EVENT_NAMES.LAYER.EVENT_LAYER_ADDED) that the user can wait for using a listener.

Make MUI theme optional

  • 2024-01-09 There are some cases that the user may want to use UI components as a standalone components (without using them in the map, or even where there is no map on the map). In these edge cases, we need to make the customized themes to be optional, since these themes are not provided in Default MUI Theme Viewer. For example, theme.panel.background needs to be changed to theme.panel?.background since there is no panel in default theme viewer. Please note we have added ? after panel.

UI

  • 2024-04-24 There will be no question mark on AppBar component to access specific section of the guide. The AppBar reuse the mobile view from the footer and we do not want to complexify the component. Our main target are desktop and tablet so they can use the intuitive footer.
  • 2024-04-24 There will be no full screen footer component go fullscreen function when viewer is already in full screen. The dual full screen creates many problems and height panel management is already very complex.