mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2026-09-02 19:43:13 +03:00
Update contributing guide
This commit is contained in:
+11
-10
@@ -12,6 +12,7 @@ If you have any questions, please join one of our [development chat rooms](https
|
|||||||
|
|
||||||
* New files **MUST** be written in TypeScript.
|
* New files **MUST** be written in TypeScript.
|
||||||
* API interactions **MUST** be made using the Jellyfin TypeScript SDK.
|
* API interactions **MUST** be made using the Jellyfin TypeScript SDK.
|
||||||
|
* New app pages **MUST** be written using React components using `src/components/Page.tsx` as the base component.
|
||||||
* **SHOULD** be covered by unit tests when possible (legacy component/view code is deemed untestable).
|
* **SHOULD** be covered by unit tests when possible (legacy component/view code is deemed untestable).
|
||||||
* **SHOULD** avoid whitespace only changes in unchanged sections of code.
|
* **SHOULD** avoid whitespace only changes in unchanged sections of code.
|
||||||
* **SHOULD NOT** overuse dynamic imports. We use dynamic imports at the page level; otherwise we should let our build tooling deal with code-splitting for the best bundle sizes.
|
* **SHOULD NOT** overuse dynamic imports. We use dynamic imports at the page level; otherwise we should let our build tooling deal with code-splitting for the best bundle sizes.
|
||||||
@@ -30,6 +31,7 @@ If you have any questions, please join one of our [development chat rooms](https
|
|||||||
* **SHOULD NOT** rebase once reviews are in progress.
|
* **SHOULD NOT** rebase once reviews are in progress.
|
||||||
* **MUST** follow the [LLM development policy](https://jellyfin.org/docs/general/contributing/llm-policies).
|
* **MUST** follow the [LLM development policy](https://jellyfin.org/docs/general/contributing/llm-policies).
|
||||||
* **MUST** test that the change works as expected before marking a PR as ready for review.
|
* **MUST** test that the change works as expected before marking a PR as ready for review.
|
||||||
|
* **MUST** fully complete the PR template. Failing to do so will result in the PR being closed as invalid without review.
|
||||||
* **SHOULD** represent a singular focus (i.e. a PR to fix a bug should not include unrelated refactoring).
|
* **SHOULD** represent a singular focus (i.e. a PR to fix a bug should not include unrelated refactoring).
|
||||||
* **SHOULD NOT** update from `master` needlessly once opened (only update if conflicts exist).
|
* **SHOULD NOT** update from `master` needlessly once opened (only update if conflicts exist).
|
||||||
|
|
||||||
@@ -51,7 +53,7 @@ You may be asked to update your Pull Request to target a release branch as part
|
|||||||
* [React](https://react.dev/reference/react) — User Interface library
|
* [React](https://react.dev/reference/react) — User Interface library
|
||||||
* [React Router](https://reactrouter.com/) — Routing library
|
* [React Router](https://reactrouter.com/) — Routing library
|
||||||
* [TanStack Query](https://tanstack.com/query/latest/docs/framework/react/overview) — State management library for server data
|
* [TanStack Query](https://tanstack.com/query/latest/docs/framework/react/overview) — State management library for server data
|
||||||
* [MUI](https://mui.com/material-ui/getting-started/) components (in Dashboard and Experimental layouts) — UI component library
|
* [MUI](https://mui.com/material-ui/getting-started/) components (in Dashboard and Modern layouts) — UI component library
|
||||||
* [Webpack](https://webpack.js.org/concepts/) — Bundler / build tooling
|
* [Webpack](https://webpack.js.org/concepts/) — Bundler / build tooling
|
||||||
* [Vitest](https://vitest.dev/api/) — Test library
|
* [Vitest](https://vitest.dev/api/) — Test library
|
||||||
|
|
||||||
@@ -59,7 +61,7 @@ You may be asked to update your Pull Request to target a release branch as part
|
|||||||
|
|
||||||
| Library | Replacement |
|
| Library | Replacement |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| [Emby WebComponents](./src/elements) | MUI components (Dashboard + Experimental apps ONLY; Untested on TVs) |
|
| [Emby WebComponents](./src/elements) | MUI components (Dashboard + Modern apps ONLY; Untested on TVs) |
|
||||||
| [App Router](./src/components/router/appRouter.js) | React Router |
|
| [App Router](./src/components/router/appRouter.js) | React Router |
|
||||||
| [View Manager](./src/components/viewManager) | React Router |
|
| [View Manager](./src/components/viewManager) | React Router |
|
||||||
| [Jellyfin ApiClient](https://github.com/jellyfin-archive/jellyfin-apiclient-javascript) | Jellyfin TypeScript SDK |
|
| [Jellyfin ApiClient](https://github.com/jellyfin-archive/jellyfin-apiclient-javascript) | Jellyfin TypeScript SDK |
|
||||||
@@ -73,13 +75,13 @@ The official list of supported browser versions can be found in the `browserlist
|
|||||||
|
|
||||||
## Application Components
|
## Application Components
|
||||||
|
|
||||||
* Stable App `src/apps/stable`
|
* Modern App `src/apps/modern`
|
||||||
|
* Ongoing rewrite of the main user interface using MUI components
|
||||||
|
* Currently reuses content from the Legacy App to maintain parity
|
||||||
|
* Does not currently support TV layout!
|
||||||
|
* Legacy App `src/apps/legacy`
|
||||||
* Main user application
|
* Main user application
|
||||||
* Supports TV layout
|
* Supports TV layout
|
||||||
* Experimental App `src/apps/experimental`
|
|
||||||
* Ongoing rewrite of the Stable App using MUI components
|
|
||||||
* Currently reuses (most) pages from the Stable App to maintain parity
|
|
||||||
* Does not currently support TV layout!
|
|
||||||
* Dashboard App `src/apps/dashboard`
|
* Dashboard App `src/apps/dashboard`
|
||||||
* Admin dashboard and metadata editor pages
|
* Admin dashboard and metadata editor pages
|
||||||
* Almost completely rewritten using MUI components
|
* Almost completely rewritten using MUI components
|
||||||
@@ -103,13 +105,12 @@ The official list of supported browser versions can be found in the `browserlist
|
|||||||
└── src
|
└── src
|
||||||
├── apps
|
├── apps
|
||||||
│ ├── dashboard # Admin dashboard app
|
│ ├── dashboard # Admin dashboard app
|
||||||
│ ├── experimental # New experimental app
|
│ ├── legacy # Legacy app
|
||||||
│ ├── stable # Classic (stable) app
|
│ ├── modern # New modern (React based) app
|
||||||
│ └── wizard # Startup wizard app
|
│ └── wizard # Startup wizard app
|
||||||
├── assets # Static assets
|
├── assets # Static assets
|
||||||
├── components # Higher order visual components and React components
|
├── components # Higher order visual components and React components
|
||||||
├── constants # Common constant values
|
├── constants # Common constant values
|
||||||
├── controllers # Legacy page views and controllers 🧹 ❌
|
|
||||||
├── elements # Basic webcomponents and React equivalents 🧹
|
├── elements # Basic webcomponents and React equivalents 🧹
|
||||||
├── hooks # Custom React hooks
|
├── hooks # Custom React hooks
|
||||||
├── lib # Reusable libraries
|
├── lib # Reusable libraries
|
||||||
|
|||||||
Reference in New Issue
Block a user