34 lines
2.2 KiB
Markdown
34 lines
2.2 KiB
Markdown
# App Layer
|
|
|
|
The composition root: owns concerns that exist once for the whole app and coordinates layers and modules without containing feature business logic. It composes global providers, configures app-wide settings and environment values, initializes i18n and global styles, defines top-level routing, provides layouts and menus, and registers core/project/development modules.
|
|
|
|
```plaintext
|
|
app/
|
|
├── config/ # global settings, environment values, and config types
|
|
├── css/ # global styles and app-level third-party overrides
|
|
├── i18n/ # languages, messages, and internationalization config
|
|
├── layouts/ # top-level Admin layout variants
|
|
├── providers/ # providers composed once for the entire application
|
|
│ ├── AppProviders.tsx
|
|
│ ├── I18nProvider.tsx
|
|
│ ├── QueryProvider.tsx
|
|
│ ├── SettingsProvider.tsx
|
|
│ └── ThemeProvider.tsx
|
|
├── routing/
|
|
│ ├── AppRouting.tsx
|
|
│ └── AppRoutingSetup.tsx
|
|
├── services/
|
|
│ └── modules/ # module registry, routes, menus, and messages
|
|
└── menu.tsx # app-level menu composition
|
|
```
|
|
|
|
Files may evolve, but ownership stays app-wide — a concern used by only one feature belongs to that feature module.
|
|
|
|
## Notes
|
|
|
|
- **Providers** — `app/providers/AppProviders.tsx` is the single composition point: TanStack Query, auth context (from the Auth core module), settings, tooltip/notification UI, theme, i18n and text direction, React Router.
|
|
- **Routing** — `app/routing/` composes top-level routes from routes contributed by registered modules; feature pages stay in their modules.
|
|
- **Config & i18n** — centralize environment access through `app/config/` instead of repeating it in feature code; `app/i18n/` owns languages and messages.
|
|
- **Layouts & CSS** — `app/layouts/` holds the Admin shell variants, `app/css/` global and third-party overrides; feature styles stay with the feature.
|
|
- **Module registration** — `app/services/modules/` wires modules in through their routes, menus, and messages; module implementation stays under `core/`, `modules/`, or `devtools/`.
|