UNPKG

openstack-uicore-foundation

Version:

ui reactjs components for openstack marketing site

65 lines (51 loc) 3.22 kB
# Project: openstack-uicore-foundation **Last Updated:** 2026-05-31 ## Overview Shared React component library for OpenStack marketing sites and summit management apps. Published as an npm package — consumers import from `lib/`. ## Technology Stack - **Language:** JavaScript (ES6+, Babel-transpiled) - **UI:** React 17, MUI 6, Formik, React-Redux 7, Redux 3 - **HTTP:** superagent - **Auth:** OAuth2 PKCE + OIDC (idtoken-verifier, browser-tabs-lock) - **Build:** Webpack 5, Babel 7 (babel.config.json) - **Test:** Jest 28, @testing-library/react 12, jsdom - **Styles:** LESS, SCSS, CSS Modules - **Node:** 18.15.0 (.nvmrc) - **Indentation:** 4 spaces (all file types — .editorconfig) ## Directory Structure ``` src/ ├── components/ │ ├── inputs/ # Form inputs (dropzone, upload V1/V2/V3, text, dropdown, etc.) │ ├── mui/ # MUI-based components (formik-inputs/, tables, dialogs, etc.) │ ├── security/ # OAuth/PKCE auth, session management, reducers │ ├── forms/ # SimpleForm, RsvpForm │ ├── sections/ # Panel │ ├── index.js # Barrel re-exports for all components │ └── ... # Individual components (clock, video-stream, etc.) ├── models/ # Data models (summit-event) ├── utils/ # Actions, reducers, methods, constants, crypto, money └── i18n/ # en.json, es.json, zh.json lib/ # Built output (gitignored, npm-published) ``` ## Key Files - **Entry/Exports:** `src/components/index.js` — barrel file with all public exports - **Webpack entries:** `webpack.common.js` — individual entry points per component (no single bundle) - **Auth core:** `src/components/security/methods.js` — OAuth PKCE, token refresh, session management - **API utils:** `src/utils/actions.js` — HTTP request helpers, error handlers, Redux action creators - **Constants:** `src/utils/constants.js` — shared numeric/string constants ## Development Commands | Task | Command | |------|---------| | Install | `yarn install` | | Build (dev) | `yarn build-dev` | | Build (prod) | `yarn build` | | Test | `jest` (or `npx jest`) | | Clean rebuild | `yarn clean` | ## Architecture Notes - **Multi-entry Webpack build:** Each component is a separate webpack entry point — consumers can import individual components without pulling the full bundle. - **Peer dependencies model:** React, MUI, Redux, and most libs are peer deps — consumers provide them. - **Redux pattern:** `createAction(TYPE)` factory → thunk actions → `getRequest`/`putRequest`/`postRequest`/`deleteRequest` helpers in `utils/actions.js`. Error handling via `authErrorHandler` with auto-redirect on 401. - **i18n:** `i18n-react` with JSON locale files. Language detected from browser, fallback to English. - **No barrel imports from `lib/`:** Components are imported directly from their paths (e.g., `openstack-uicore-foundation/lib/components/inputs/upload-input-v3`). - **Commented-out exports** in `src/components/index.js` are components with heavy 3rd-party deps (Stripe, react-beautiful-dnd) — imported separately by consumers.