Skip to content

feat(layout): add foundation #323

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 24 commits into from
Apr 13, 2023
Merged

feat(layout): add foundation #323

merged 24 commits into from
Apr 13, 2023

Conversation

Birkbjo
Copy link
Member

@Birkbjo Birkbjo commented Mar 14, 2023

No description provided.

Copy link
Contributor

@Mohammer5 Mohammer5 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Centralizing the open state and make nav children stateless

With the simplication of the forceOpen and previous state in the SidenavParent (see this comment), you could centralize the state for which parent is open in the Sidebar component by using useState that has an array with all opened labels. That way you can remove the entire HidePreventUnmount logic / component, which seems unnecessarily complicated to me. The approach of centralizing the state in a single component and than rendering only
stateless components seems to be simpler to me.

components/utils folder

src/components/utils should have a better name. I'd argue for splitting it up into the components that are inside. src/components is already an "abstraction" (components that are shared), adding another architectural layer of abstraction makes the architecture more complex & complicated. It's also debatable which component is a util and which is not, which introduces ambiguity. With my suggestion to centralize/simplify the state in the sidebar (see one headline above) and subsequently being able to remove HidePreventUnmount, we can get rid of this folder as there's nothing in there right now

Nav filtering

filtering doesn't include group labels (e.g. "Data elements" as search would result in an empty list. I suppose you could argue that "Data element" should be enough, but it wouldn't include the overview pages)

Components for overview views

With all overview pages being located in src/pages/overview, we can move the components inside src/components/overview into src/pages/overview and co-locate the related code which won't be used anywhere else. Same applies to what can be found in src/components/card

Errors when opening app in the browser

This is happening because some file names are lower case but the import statements use a capitalized folder name and vice versa. It's weird that these errors don't show up on the cli.

Compiled with problems:

ERROR in ./src/D2App/App.js 5:104-120

export 'ConfiguredRouter' (imported as 'ConfiguredRouter') was not found in './app/' (possible exports: AppWrapper, Layout)


ERROR in ./src/D2App/app/index.js 3:0-34

export 'Layout' (reexported as 'Layout') was not found in './layout' (module has no exports)


ERROR in ./src/D2App/app/index.js 5:0-44

Module not found: Error: Can't resolve './Router' in '/shared/development/dhis2/maintenance-app-beta/.d2/shell/src/D2App/app'


ERROR in ./src/D2App/app/layout/index.js 3:0-34

Module not found: Error: Can't resolve './Layout' in '/shared/development/dhis2/maintenance-app-beta/.d2/shell/src/D2App/app/layout'

@@ -0,0 +1,3 @@
export { Layout} from './layout'
export { AppWrapper } from "./AppWrapper";
export { ConfiguredRouter } from "./Router";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
export { ConfiguredRouter } from "./Router";
export { ConfiguredRouter } from "./router";

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah sorry about these, last thing I worked on was fixing up the file names, and I realized I never finished and didn't push my latest work.

@@ -0,0 +1 @@
export { Layout } from './Layout';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
export { Layout } from './Layout';
export { Layout } from './layout';


// React.lazy only works with default exports, so we import directly instead of from index.tsx
const AllOverview = lazy(() => import("./AllOverview"));
const DataElements = lazy(() => import("./DataElements"));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const DataElements = lazy(() => import("./DataElements"));
const DataElements = lazy(() => import("./dataElements"));

Copy link
Contributor

@Mohammer5 Mohammer5 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mozafar and I agreed that we want to merge PR 323 asap. So I extracted open comments into separate sub tasks here, so they can be worked on right away after merging the PR.

Immediate follow-up todos: https://dhis2.atlassian.net/browse/DHIS2-15071

@Birkbjo
Copy link
Member Author

Birkbjo commented Apr 11, 2023

src/components/utils should have a better name. I'd argue for splitting it up into the components that are inside. src/components is already an "abstraction" (components that are shared), adding another architectural layer of abstraction makes the architecture more complex & complicated. It's also debatable which component is a util and which is not, which introduces ambiguity. With my suggestion to centralize/simplify the state in the sidebar (see one headline above) and subsequently being able to remove HidePreventUnmount, we can get rid of this folder as there's nothing in there right now

I'm not sure that utils and src/components would be the same abstraction. It's for utility components. I think it's perfectly valid to have a folder like that, and we will most likely end up with components that fit that, instead of creating separate folders for small utility components like these.

We can probably do without HidePreventUnmount, but I do think it solves a valid problem and actually simplifies the state handling in this case. But if we don't want to keep the previous state after clearing the filter (as @cooper-joe seems to suggest), it's not needed for now.

Nav Filtering

filtering doesn't include group labels (e.g. "Data elements" as search would result in an empty list. I suppose you could argue that "Data element" should be enough, but it wouldn't include the overview pages)

I have added logic for this now. If there's a match in the parent label, all children routes are shown. Do you agree with this logic, @cooper-joe ?

@Mohammer5
Copy link
Contributor

I'm not sure that utils and src/components would be the same abstraction. It's for utility components.

That's not what I was trying to say, but that having two nested abstraction-folders is increasing complexity.

I think it's perfectly valid to have a folder like that, and we will most likely end up with components that fit that, instead of creating separate folders for small utility components like these.

Another point I made is that it can be debatable which component is a util and which is not, which introduces ambiguity. I think HidePreventUnmount is a very good example for what I'm trying to point out. As a developer, I know that src/components will contain shared components, the abstraction level is quite clear. Then inside that folder, there's the utils folder which I wouldn't know what to find inside conceptually. Why would HidePreventUnmount be a utility? What's the difference between that component and Loader for example, which could be considered a utility component but is not in the utils folder. Just like DefaultLazyLoad.

Considering my comment to move what's inside components/card & components/overview into pages/overview (as that is the only place where these will be used, they're not really that "shared"), everything that'd be left in components could be considered a utility component.

So having utils seems very ambiguous to me and therefore also reduce discoverability due to the extra level of nesting. I can't see the advantage or necessity of that folder yet, but on the other hand I can see disadvantages and lack of clarity.

We can probably do without HidePreventUnmount, but I do think it solves a valid problem and actually simplifies the state handling in this case. But if we don't want to keep the previous state after clearing the filter (as @cooper-joe seems to suggest), it's not needed for now.

I can't see the component being used anywhere right now.

@cooper-joe
Copy link
Member

I have added logic for this now. If there's a match in the parent label, all children routes are shown. Do you agree with this logic, @cooper-joe ?

Yeah, I think we can go for this. The alternative of hiding children would be too confusing (as parent labels are not navigation).

@Birkbjo
Copy link
Member Author

Birkbjo commented Apr 12, 2023

Another point I made is that it can be debatable which component is a util and which is not, which introduces ambiguity.

Why would HidePreventUnmount be a utility? What's the difference between that component and Loader for example, which could be considered a utility component but is not in the utils folder. Just like DefaultLazyLoad.

Yeah I agree that it can be a bit arbitrary. I'm not sure if it's ambiguous though - it's just a decision where it lives. And everything we do are decisions right? And can look arbitrary if you don't know the context or reason behind a decision. But that doesn't mean it's ambiguous. utils is just a catch-all for small utility components that doesn't "deserve" it's own folder. I do think both Loader and DefaultLazyLoad could be in a utils-folder, but as they have styles attached, and thus not in one file I decided to move it to their own folders. I think introducing a folder for just one file is a bit overkill, and I wouldn't even be sure what to call the concept of HidePreventUnmount - it's just a small utility component.

@Mohammer5
Copy link
Contributor

Mohammer5 commented Apr 13, 2023

@Birkbjo I've created a separate issue (#324 / DHIS2-15080) so we can talk about it. I'll merge this PR to unblock work.

@Mohammer5 Mohammer5 merged commit 8b4d90c into master Apr 13, 2023
@Mohammer5 Mohammer5 deleted the feat/layout branch April 13, 2023 02:22
dhis2-bot added a commit that referenced this pull request Jun 7, 2024
# 1.0.0 (2024-06-07)

### Bug Fixes

* **config:** remove app from name ([f137a54](f137a54))
* fix cypress tests and color/icon buttons ([#402](#402)) ([251d76c](251d76c))
* **aggregation and value type fields:** do not use generated types for validation ([8edd272](8edd272))
* **aggregation type:** use "NONE" as default value ([89bb4c1](89bb4c1))
* **attributes:** fix deselecting attribute ([#361](#361)) ([2cc8801](2cc8801))
* **color and icon picker:** add remove icon btn & adjust styles according to specs ([c18f7f0](c18f7f0))
* **color and icon picker:** make button component a html button instead of div ([f7a2c50](f7a2c50))
* **custom attributes optionsets:** add no-value-option only when not required ([c10ec33](c10ec33))
* **dataElement:** default to default-cat-combo ([#400](#400)) ([90ff733](90ff733))
* **de form fields:** make text translatable ([8ab3090](8ab3090))
* **download:** default to only selected when list has selections ([#394](#394)) ([f7048fb](f7048fb))
* **download:** fix radio name ([b4f703b](b4f703b))
* **edit:** fix icons api response ([#377](#377)) ([f014351](f014351))
* **edit de:** allow removing nested values ([cc66cbd](cc66cbd))
* **filter:** add useInfiniteDataQuery ([0fa3b91](0fa3b91))
* **filters:** use refactored sectionlistfilter for refetch ([2dcbc75](2dcbc75))
* **form:** fix cancel link ([0fb0d12](0fb0d12))
* **form:** fix editing style object ([#362](#362)) ([88e1a58](88e1a58))
* **form:** fix render 0 when empty custom attributes ([92fb57a](92fb57a))
* **form:** hide custom attributes section if no attributes assigned ([#384](#384)) ([da4bbc9](da4bbc9))
* **form:** stylistic issues: max-width, todos, labels ([#385](#385)) ([523e8e9](523e8e9))
* **list:** fix filter being cleared on refresh ([#382](#382)) ([fc2f881](fc2f881))
* **list:** improve select performance for big lists ([#378](#378)) ([0a98f3c](0a98f3c))
* **list:** resolve reference names ([#360](#360)) ([ccd226c](ccd226c)), closes [#354](#354)
* **managelistview:** move reset to default to rightfooter ([b177893](b177893))
* **model single select:** search loaded options for selected option ([d022b8b](d022b8b))
* **model single select:** search loaded options for selected option ([57ad629](57ad629))
* **modelview:** put empty array if default ([13baa3e](13baa3e))
* **systemSettings:** use generic type for setting inference ([#393](#393)) ([e115fc6](e115fc6))
* add empty list message ([647713b](647713b))
* add linkbutton component ([c19814f](c19814f))
* cleanup ([407c912](407c912))
* cleanup filter props in DE-List ([3242a4f](3242a4f))
* failing test ([b506bae](b506bae))
* filtereddataelement type ([22e1600](22e1600))
* fix failing test ([e5c7eb5](e5c7eb5))
* fix sorting of filters ([1206241](1206241))
* fix uncontrolled input in identifiablefilter ([a4b2292](a4b2292))
* handle errors in list request ([ec160e7](ec160e7))
* hide unauthorized section cards ([11e18e6](11e18e6))
* missing files ([6718da9](6718da9))
* reset paging when clearing filters ([fdb0b10](fdb0b10))
* resolve conflict between cypress and jest types ([475907c](475907c))
* review ([92c1648](92c1648))
* simplify initial selected logic ([eb4ce54](eb4ce54))
* some cleanup ([432ac43](432ac43))
* some cleanup ([52b3521](52b3521))
* update default view for dataElements ([2125f77](2125f77))
* **searchable single selects:** add posibility to deselect ([f557dd0](f557dd0))
* **searchable single selects:** use old-app default labels ([7e5c907](7e5c907))
* **sectionlist:** add page title ([#346](#346)) ([110089f](110089f))
* **summarycard:** adjust icon-less design ([b938394](b938394))
* **summarycard:** remove unneeded wrapper ([72289c7](72289c7))
* **summarycard:** update button styles ([#353](#353)) ([494cf62](494cf62))
* update and simplify filter logic ([c4c507f](c4c507f))
* update empty text ([4e6e0b1](4e6e0b1))
* use spacers for styling ([0522f81](0522f81))
* wip filters ([342dbad](342dbad))
* **usemodelgist:** add goToPage to paginator ([5367159](5367159))
* add dynamicparams ([5e76a8c](5e76a8c))
* add missing dataElements pages ([3992228](3992228))
* add missing folder ([db51744](db51744))
* add missing folder ([c205bb1](c205bb1))
* add parentSectionKey to sections ([d6571f2](d6571f2))
* add relationShipType section ([da8132f](da8132f))
* add sections routes and legacy-redirects ([7971346](7971346))
* base types for schema saved schemas in zustand ([92055bc](92055bc))
* better loadschema typings ([dcda02d](dcda02d))
* better schema typing ([f83c0bd](f83c0bd))
* cleanup ([086a266](086a266))
* cleanup ([74b7321](74b7321))
* cleanup comment ([0dff06a](0dff06a))
* cleanup schema-routes ([3f36f28](3f36f28))
* cleanup schemas ([416acb9](416acb9))
* deduplicate deps ([10351a2](10351a2))
* deduplicate yarn lock ([3916128](3916128))
* improve BaseModelSchemas type ([5151f6e](5151f6e))
* layout overflow ([a56f459](a56f459))
* legacy redirect ([c00e996](c00e996))
* legacy routing for non-standard sections ([4a23954](4a23954))
* load overviews in same chunk ([220a69e](220a69e))
* map properties to record ([2a25430](2a25430))
* merge all generates files ([4c54b25](4c54b25))
* remove code, add handle to route ([32acb49](32acb49))
* remove locales folder ([f3ed675](f3ed675))
* remove unnecessary file ([f103853](f103853))
* simplify result type ([4741bcc](4741bcc))
* update useLoadApp with typefix ([13ae9d8](13ae9d8))
* useSchemaSectionHandleOrThrow ([0812aa9](0812aa9))
* **auth:** consider ALL authority ([561f236](561f236))
* **deps:** upgrade app-runtime for type fix ([a0069bd](a0069bd))
* **layout:** prepare layout for hide sidebar ([fd795d1](fd795d1))
* **legacyredirects:** fix programs redirect ([db225bb](db225bb))
* **overview:** fix category description ([c761c41](c761c41))
* **overview:** use constants for overview ([095e0d6](095e0d6))
* **overviewcards:** add link to card ([03e88e1](03e88e1))
* **router:** allow sections to opt-out of new/edit routes ([59f85f6](59f85f6))
* **router:** use replace for index redirect ([7007a18](7007a18))
* **schemas:** improve schema types ([43b1a9b](43b1a9b))
* **sections:** add section constants ([19187ca](19187ca))
* **sections:** make parentSectionKey required ([fb5ebe6](fb5ebe6))
* **sidebar:** add missing category ([80bc7c4](80bc7c4))
* **sidebar:** open routes when child routes matches ([faaedbd](faaedbd))
* **summarycard:** fix nested links and missing param ([#335](#335)) ([e20a1dc](e20a1dc))
* **type:** add app-rutime query-type ([8fd573d](8fd573d))
* **types:** add declaration for @dhis2/ui modules ([0a2ab11](0a2ab11))
* **types:** add missing error type ([fbe957d](fbe957d))
* **types:** fix type errors in files ([faeb206](faeb206))
* move declarations to global.d.ts ([39f5573](39f5573))
* remove unused type ([84c1c38](84c1c38))
* rename sidenav ([510b949](510b949))
* sidebarlinks filename and use plural for overview path ([4307be8](4307be8))
* types ([3e5477c](3e5477c))
* wrong casing for file name ([a57c46c](a57c46c))

### Features

* **authorities:** respect keyRequireAddToView when filtering sections ([#347](#347)) ([4031f68](4031f68))
* **breadcrumb:** breadcrumbs navigation ([#328](#328)) ([b247c53](b247c53))
* **custom attributes:** add "No value" option to optionset attributes ([de8cf8c](de8cf8c))
* **data element forms:** add validation ([#359](#359)) ([331eabd](331eabd))
* **data elements:** add form field rules ([a77697d](a77697d))
* **de edit and new:** handle loading and error states correctly ([32f7e20](32f7e20))
* **de form:** add aggregation level intro text ([402de21](402de21))
* **detailsPanel:** add detailsPanel in list-view ([#358](#358)) ([aceade9](aceade9)), closes [#354](#354)
* **filters:** add filters for dataSet and catCombo ([5c7acb4](5c7acb4))
* **filters:** rework config for better type safety for dynamic filters ([c132fd6](c132fd6))
* **layout:** add foundation ([#323](#323)) ([8b4d90c](8b4d90c))
* **list:** add bulk sharing ([#373](#373)) ([70e8d96](70e8d96))
* **list:** add filters to manage view ([5d67e27](5d67e27))
* **list:** add list for group and groupset ([#379](#379)) ([77f5695](77f5695))
* **list:** add more dropdown ([0ff853d](0ff853d))
* **list:** add sort for columns ([#368](#368)) ([90b02a4](90b02a4))
* **list:** add translation dialog ([#389](#389)) ([d21cd95](d21cd95)), closes [#392](#392)
* **list:** download dialog ([#392](#392)) ([d2b6582](d2b6582))
* **list:** manage columns ([#352](#352)) ([9ecd37d](9ecd37d)), closes [#354](#354)
* **list:** sharing dialog ([#374](#374)) ([abdad54](abdad54))
* **list view:** add delete action to row items ([#376](#376)) ([d1eeef9](d1eeef9))
* add data element group New and Edit views ([b06d6f2](b06d6f2))
* add data element group set New and Edit views ([3c02ce8](3c02ce8))
* **list:** implement more menu ([734d47d](734d47d))
* add controlled searchable select & category combo select ([#351](#351)) ([bb91abb](bb91abb))
* add data elements add/edit form ([#344](#344)) ([a9daea7](a9daea7))
* add publicAccessFilter ([a7e5d2f](a7e5d2f))
* **list:** pagination ([cc29470](cc29470))
* **list:** render user-friendly values ([#350](#350)) ([f03c2b6](f03c2b6))
* **systemSettings:** load systemsettings on appload ([#348](#348)) ([9e268df](9e268df))
* add protectedsection ([664e5dc](664e5dc))
* add translations for model constants ([c689080](c689080))
* filter authorized sections in overview ([cfdf9f5](cfdf9f5))
* logic to hide sidebar ([ead5966](ead5966))
* sectionlistheader, wip filters ([f585402](f585402))
* sectionlistwrapper ([d59d5ae](d59d5ae))
* useModelGist ([fcd341c](fcd341c))
* useSectionListFilter ([c431631](c431631))
* working filters ([0eac9d1](0eac9d1))
* **authorities:** add authority hooks ([4d3d6e8](4d3d6e8))
* **model-types:** add generated modeltypes ([8e888fe](8e888fe))
* **model-types:** add generated modeltypes ([#339](#339)) ([fc7e225](fc7e225))
* **modeltypes:** add modeltypes ([d3c2486](d3c2486))
* **overview:** add category overview ([ed97305](ed97305))
* **sectionlist:** add sectionList for data elements ([7721bbb](7721bbb))
@dhis2-bot
Copy link
Contributor

🎉 This PR is included in version 1.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

dhis2-bot added a commit that referenced this pull request Jun 7, 2024
# 1.0.0 (2024-06-07)

### Bug Fixes

* **config:** remove app from name ([f137a54](f137a54))
* fix cypress tests and color/icon buttons ([#402](#402)) ([251d76c](251d76c))
* **aggregation and value type fields:** do not use generated types for validation ([8edd272](8edd272))
* **aggregation type:** use "NONE" as default value ([89bb4c1](89bb4c1))
* **attributes:** fix deselecting attribute ([#361](#361)) ([2cc8801](2cc8801))
* **color and icon picker:** add remove icon btn & adjust styles according to specs ([c18f7f0](c18f7f0))
* **color and icon picker:** make button component a html button instead of div ([f7a2c50](f7a2c50))
* **custom attributes optionsets:** add no-value-option only when not required ([c10ec33](c10ec33))
* **dataElement:** default to default-cat-combo ([#400](#400)) ([90ff733](90ff733))
* **de form fields:** make text translatable ([8ab3090](8ab3090))
* **download:** default to only selected when list has selections ([#394](#394)) ([f7048fb](f7048fb))
* **download:** fix radio name ([b4f703b](b4f703b))
* **edit:** fix icons api response ([#377](#377)) ([f014351](f014351))
* **edit de:** allow removing nested values ([cc66cbd](cc66cbd))
* **filter:** add useInfiniteDataQuery ([0fa3b91](0fa3b91))
* **filters:** use refactored sectionlistfilter for refetch ([2dcbc75](2dcbc75))
* **form:** fix cancel link ([0fb0d12](0fb0d12))
* **form:** fix editing style object ([#362](#362)) ([88e1a58](88e1a58))
* **form:** fix render 0 when empty custom attributes ([92fb57a](92fb57a))
* **form:** hide custom attributes section if no attributes assigned ([#384](#384)) ([da4bbc9](da4bbc9))
* **form:** stylistic issues: max-width, todos, labels ([#385](#385)) ([523e8e9](523e8e9))
* **list:** fix filter being cleared on refresh ([#382](#382)) ([fc2f881](fc2f881))
* **list:** improve select performance for big lists ([#378](#378)) ([0a98f3c](0a98f3c))
* **list:** resolve reference names ([#360](#360)) ([ccd226c](ccd226c)), closes [#354](#354)
* **managelistview:** move reset to default to rightfooter ([b177893](b177893))
* **model single select:** search loaded options for selected option ([d022b8b](d022b8b))
* **model single select:** search loaded options for selected option ([57ad629](57ad629))
* **modelview:** put empty array if default ([13baa3e](13baa3e))
* **systemSettings:** use generic type for setting inference ([#393](#393)) ([e115fc6](e115fc6))
* add empty list message ([647713b](647713b))
* add linkbutton component ([c19814f](c19814f))
* cleanup ([407c912](407c912))
* cleanup filter props in DE-List ([3242a4f](3242a4f))
* failing test ([b506bae](b506bae))
* filtereddataelement type ([22e1600](22e1600))
* fix failing test ([e5c7eb5](e5c7eb5))
* fix sorting of filters ([1206241](1206241))
* fix uncontrolled input in identifiablefilter ([a4b2292](a4b2292))
* handle errors in list request ([ec160e7](ec160e7))
* hide unauthorized section cards ([11e18e6](11e18e6))
* missing files ([6718da9](6718da9))
* reset paging when clearing filters ([fdb0b10](fdb0b10))
* resolve conflict between cypress and jest types ([475907c](475907c))
* review ([92c1648](92c1648))
* simplify initial selected logic ([eb4ce54](eb4ce54))
* some cleanup ([432ac43](432ac43))
* some cleanup ([52b3521](52b3521))
* update default view for dataElements ([2125f77](2125f77))
* **searchable single selects:** add posibility to deselect ([f557dd0](f557dd0))
* **searchable single selects:** use old-app default labels ([7e5c907](7e5c907))
* **sectionlist:** add page title ([#346](#346)) ([110089f](110089f))
* **summarycard:** adjust icon-less design ([b938394](b938394))
* **summarycard:** remove unneeded wrapper ([72289c7](72289c7))
* **summarycard:** update button styles ([#353](#353)) ([494cf62](494cf62))
* update and simplify filter logic ([c4c507f](c4c507f))
* update empty text ([4e6e0b1](4e6e0b1))
* use spacers for styling ([0522f81](0522f81))
* wip filters ([342dbad](342dbad))
* **usemodelgist:** add goToPage to paginator ([5367159](5367159))
* add dynamicparams ([5e76a8c](5e76a8c))
* add missing dataElements pages ([3992228](3992228))
* add missing folder ([db51744](db51744))
* add missing folder ([c205bb1](c205bb1))
* add parentSectionKey to sections ([d6571f2](d6571f2))
* add relationShipType section ([da8132f](da8132f))
* add sections routes and legacy-redirects ([7971346](7971346))
* base types for schema saved schemas in zustand ([92055bc](92055bc))
* better loadschema typings ([dcda02d](dcda02d))
* better schema typing ([f83c0bd](f83c0bd))
* cleanup ([086a266](086a266))
* cleanup ([74b7321](74b7321))
* cleanup comment ([0dff06a](0dff06a))
* cleanup schema-routes ([3f36f28](3f36f28))
* cleanup schemas ([416acb9](416acb9))
* deduplicate deps ([10351a2](10351a2))
* deduplicate yarn lock ([3916128](3916128))
* improve BaseModelSchemas type ([5151f6e](5151f6e))
* layout overflow ([a56f459](a56f459))
* legacy redirect ([c00e996](c00e996))
* legacy routing for non-standard sections ([4a23954](4a23954))
* load overviews in same chunk ([220a69e](220a69e))
* map properties to record ([2a25430](2a25430))
* merge all generates files ([4c54b25](4c54b25))
* remove code, add handle to route ([32acb49](32acb49))
* remove locales folder ([f3ed675](f3ed675))
* remove unnecessary file ([f103853](f103853))
* simplify result type ([4741bcc](4741bcc))
* update useLoadApp with typefix ([13ae9d8](13ae9d8))
* useSchemaSectionHandleOrThrow ([0812aa9](0812aa9))
* **auth:** consider ALL authority ([561f236](561f236))
* **deps:** upgrade app-runtime for type fix ([a0069bd](a0069bd))
* **layout:** prepare layout for hide sidebar ([fd795d1](fd795d1))
* **legacyredirects:** fix programs redirect ([db225bb](db225bb))
* **overview:** fix category description ([c761c41](c761c41))
* **overview:** use constants for overview ([095e0d6](095e0d6))
* **overviewcards:** add link to card ([03e88e1](03e88e1))
* **router:** allow sections to opt-out of new/edit routes ([59f85f6](59f85f6))
* **router:** use replace for index redirect ([7007a18](7007a18))
* **schemas:** improve schema types ([43b1a9b](43b1a9b))
* **sections:** add section constants ([19187ca](19187ca))
* **sections:** make parentSectionKey required ([fb5ebe6](fb5ebe6))
* **sidebar:** add missing category ([80bc7c4](80bc7c4))
* **sidebar:** open routes when child routes matches ([faaedbd](faaedbd))
* **summarycard:** fix nested links and missing param ([#335](#335)) ([e20a1dc](e20a1dc))
* **type:** add app-rutime query-type ([8fd573d](8fd573d))
* **types:** add declaration for @dhis2/ui modules ([0a2ab11](0a2ab11))
* **types:** add missing error type ([fbe957d](fbe957d))
* **types:** fix type errors in files ([faeb206](faeb206))
* move declarations to global.d.ts ([39f5573](39f5573))
* remove unused type ([84c1c38](84c1c38))
* rename sidenav ([510b949](510b949))
* sidebarlinks filename and use plural for overview path ([4307be8](4307be8))
* types ([3e5477c](3e5477c))
* wrong casing for file name ([a57c46c](a57c46c))

### Features

* **authorities:** respect keyRequireAddToView when filtering sections ([#347](#347)) ([4031f68](4031f68))
* **breadcrumb:** breadcrumbs navigation ([#328](#328)) ([b247c53](b247c53))
* **custom attributes:** add "No value" option to optionset attributes ([de8cf8c](de8cf8c))
* **data element forms:** add validation ([#359](#359)) ([331eabd](331eabd))
* **data elements:** add form field rules ([a77697d](a77697d))
* **de edit and new:** handle loading and error states correctly ([32f7e20](32f7e20))
* **de form:** add aggregation level intro text ([402de21](402de21))
* **detailsPanel:** add detailsPanel in list-view ([#358](#358)) ([aceade9](aceade9)), closes [#354](#354)
* **filters:** add filters for dataSet and catCombo ([5c7acb4](5c7acb4))
* **filters:** rework config for better type safety for dynamic filters ([c132fd6](c132fd6))
* **layout:** add foundation ([#323](#323)) ([8b4d90c](8b4d90c))
* **list:** add bulk sharing ([#373](#373)) ([70e8d96](70e8d96))
* **list:** add filters to manage view ([5d67e27](5d67e27))
* **list:** add list for group and groupset ([#379](#379)) ([77f5695](77f5695))
* **list:** add more dropdown ([0ff853d](0ff853d))
* **list:** add sort for columns ([#368](#368)) ([90b02a4](90b02a4))
* **list:** add translation dialog ([#389](#389)) ([d21cd95](d21cd95)), closes [#392](#392)
* **list:** download dialog ([#392](#392)) ([d2b6582](d2b6582))
* **list:** manage columns ([#352](#352)) ([9ecd37d](9ecd37d)), closes [#354](#354)
* **list:** sharing dialog ([#374](#374)) ([abdad54](abdad54))
* **list view:** add delete action to row items ([#376](#376)) ([d1eeef9](d1eeef9))
* add data element group New and Edit views ([b06d6f2](b06d6f2))
* add data element group set New and Edit views ([3c02ce8](3c02ce8))
* **list:** implement more menu ([734d47d](734d47d))
* add controlled searchable select & category combo select ([#351](#351)) ([bb91abb](bb91abb))
* add data elements add/edit form ([#344](#344)) ([a9daea7](a9daea7))
* add publicAccessFilter ([a7e5d2f](a7e5d2f))
* **list:** pagination ([cc29470](cc29470))
* **list:** render user-friendly values ([#350](#350)) ([f03c2b6](f03c2b6))
* **systemSettings:** load systemsettings on appload ([#348](#348)) ([9e268df](9e268df))
* add protectedsection ([664e5dc](664e5dc))
* add translations for model constants ([c689080](c689080))
* filter authorized sections in overview ([cfdf9f5](cfdf9f5))
* logic to hide sidebar ([ead5966](ead5966))
* sectionlistheader, wip filters ([f585402](f585402))
* sectionlistwrapper ([d59d5ae](d59d5ae))
* useModelGist ([fcd341c](fcd341c))
* useSectionListFilter ([c431631](c431631))
* working filters ([0eac9d1](0eac9d1))
* **authorities:** add authority hooks ([4d3d6e8](4d3d6e8))
* **model-types:** add generated modeltypes ([8e888fe](8e888fe))
* **model-types:** add generated modeltypes ([#339](#339)) ([fc7e225](fc7e225))
* **modeltypes:** add modeltypes ([d3c2486](d3c2486))
* **overview:** add category overview ([ed97305](ed97305))
* **sectionlist:** add sectionList for data elements ([7721bbb](7721bbb))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants