尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Frontend for Sobek — Entur's national vehicle registry (Nasjonalt Materiellregister).
• React 19 + TypeScript
• Vite
• Material UI v7
• GraphQL (graphql-request)
• OIDC authentication (react-oidc-context)
Requires a running Sobek backend (default: http://localhost:37999).
docs/architecture.html is a standalone, interactive diagram of the component architecture — from App.tsx down through the generic wrappers (GenericDataViewPage, GenericDetailsPage) to every feature view. Open it in a browser (it loads D3 from a CDN); click a widget chip to expand its detail.查看完整 README ↗Work in progress
Frontend for Sobek — Entur's national vehicle registry (Nasjonalt Materiellregister).
↻ Deployment(s) : dev
💡 Sandbox/mind-maps : entur.github.io/hathor
graphql-request)react-oidc-context)npm install
npm run dev # Dev server on http://localhost:5000
Requires a running Sobek backend (default: http://localhost:37999).
| Command | Description |
|---|---|
npm run dev | Start dev server (uses dev API) |
npm run local | Start dev server (uses local Sobek at 127.0.0.1:37999) |
npm run build | Type-check and build (build/) |
npm run lint | ESLint |
npm run format | Prettier auto-format |
npm run e2e | Playwright tests (mocked GraphQL) |
npm run e2e:local-backend | Playwright tests against a live local Sobek |
docs/architecture.html is a standalone, interactive diagram of the component architecture — from App.tsx down through the generic wrappers (GenericDataViewPage, GenericDetailsPage) to every feature view. Open it in a browser (it loads D3 from a CDN); click a widget chip to expand its detail.
Keeping it in sync: the diagram is driven by docs/architecture-data.js, a generated metafile. When routes or views change in src/App.tsx, regenerate it with npm run gen:arch. See the RUN section of the JSDoc header in scripts/gen-arch-metafile.mjs for details.
Hathor's src/ mixes two organizational styles. Before adding files, know which one you're touching.
Vertical (feature) folders:
auth/ — OIDC bootstrap, ProtectedRoute, login flow, auth utilities.config/ — runtime config fetch (fetchConfig.ts).theme/ — createThemeFromConfig, MUI theme module augmentation (theme-config.d.ts).data/<feature>/ — production domain folders (vehicles/, vehicle-types/, deck-plans/, vehicle-imports/). Each holds the data hook, view config, editor, cells, types, and View + Details components for one entity.graphql/ — GraphQL operations grouped by feature.locales/ — i18next translation files (en/, nb/).Horizontal (file-kind) folders:
components/ — UI components grouped by sub-area (data/, search/, header/, sidebar/, dialogs/, common/, auth/).hooks/ — global hooks shared across features.pages/ — generic infrastructure (GenericDataViewPage, GenericDetailsPage) and the Home page. Entity Views live in data/<feature>/, not here.utils/ — domain-neutral helpers (iconLoaderUtils.ts).contexts/ — top-level React contexts not yet hosted in feature folders (configContext, CustomizationContext, EditingContext, SessionContext).static/ — static assets.Where new files go:
data/<feature>/. Data hook, view config, editor, cells, types, and the View component live together. Add a route in App.tsx.pages/.hooks/. Single-feature hook → next to its caller in data/<feature>/.*Types.ts file → next to its primary consumer. Feature types under data/<feature>/; types that pair with shared infrastructure go with that infra (e.g. pages/viewConfigTypes.ts, graphql/paginationTypes.ts, components/data/dataTableTypes.ts). Don't recreate src/types/..tsx. No JSX → .ts.Some contexts (configContext, CustomizationContext) and a few hooks haven't migrated to their feature folders yet — see OPEN_QUESTIONS.md for tracked design ambiguities.
Hathor is a fork of Inanna, Entur's React data-registry starter. Extending it — new entity views, theming, custom icons — follows the Inanna extend-fork workflow; see DEV_GUIDE.md for the pointer.
Known design ambiguities are tracked in OPEN_QUESTIONS.md.