Sections
Implements the following patterns: Collections
Sections are parts of an application that are shown at certain times. These can be full pages or smaller parts, like a menu bar.
The isMounted
flag on sections can be a trigger for a producer to decide if a
certain section needs to be present or not.
For example when loading an application a producer can decide that the
Initialitzation
section should be visible if data is not yet synced. After the
data is synced the same or another producer can decide that the Login
page
should be shown. If the user is authenticated then the Dashboard
page would be
shown. If the user is of a certain type then the StatisticsPanel
can be shown.
Each section has a data
location where it can store temporary data.
enum Sections {
XYZ = 'xyz',
ABC = 'abc'
}
{
sections: {
items: {
[Sections.XYZ]: {
id: Sections.XYZ,
isMounted: true,
data: {
tempValue: '123'
}
},
[Sections.ABC]: {
id: Sections.ABC,
isMounted: false,
data: {}
}
},
ids: ['xyz', 'abc']
}
}
const SectionXyz: view = ({
isMounted = observe.sections.items[Sections.XYZ].isMounted,
data = observe.sections.items[Sections.XYZ].data.tempValue
}) => isMounted && <div>I'm section xyz: {data}</div>
const SectionAbc: view = ({
isMounted = observe.sections.items[Sections.Abc].isMounted
}) => isMounted && <div>I'm section abc</div>
const App: view = () => <>
<SectionXyz />
<SectionAbc />
</>