Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
a567bbf
[C] Scaffold my submissions + review submissions routes
1aurend Feb 24, 2026
53cef32
[C] Scaffold new submission form
1aurend Feb 24, 2026
f986a75
[C] Scaffold submission detail routes
1aurend Feb 24, 2026
bff00f5
[C] Scaffold review submission drawer
1aurend Feb 24, 2026
81e7b68
[C] Scaffold submission detail + edit form
1aurend Feb 24, 2026
dbf720e
[C] Update CI to match node/yarn versions
1aurend Feb 25, 2026
62baf24
[F] Add StatusBadge + ReviewComment atomics
1aurend Feb 25, 2026
0f29038
[F] Add StatusColumn
1aurend Feb 25, 2026
309a770
[F] Add submit + condition actions on status
1aurend Feb 25, 2026
6f7f43a
[F] Scaffold collection manage submissions page
1aurend Mar 3, 2026
2a15a0c
[F] Add publish route + initial UI for bulk actions
1aurend Mar 3, 2026
48b3494
[E] Handle collection param on new submission route
1aurend Mar 3, 2026
28638ee
[E] Add review next/prev nav to bottom
1aurend Mar 3, 2026
875239c
[F] Scaffold dashboard layout + messaging for depositors
1aurend Mar 4, 2026
b4f69ff
[C] Update schema
1aurend Mar 9, 2026
304509d
[E] Add depositing fields to global settings
1aurend Mar 9, 2026
1566299
[E] Hide submissions nav when despositing disabled
1aurend Mar 9, 2026
491af3e
[F] Build + wire up submission target configure form
1aurend Mar 9, 2026
d296543
[F] Build out + wire up create submission form
1aurend Mar 10, 2026
9871cfa
[F] Wire up submission lists + add filters
1aurend Mar 10, 2026
b4b529f
[E] Move filters out of search bar
1aurend Mar 10, 2026
8120bab
[F] Wire up SubmissionLayout + switch to UpdateItemForm
1aurend Mar 10, 2026
db05802
[E] Adjust CollectionSubmission styles + i18n keys
1aurend Mar 10, 2026
6c66fec
[F] Wire up submit submission
1aurend Mar 10, 2026
ddb54e7
[B] Fix error handling on SubmissionTargetStateToggle
1aurend Mar 10, 2026
a560052
[F] Wire up review form
1aurend Mar 10, 2026
76befd3
[F] Add reviews list + wire up history
1aurend Mar 11, 2026
b76a7ad
[F] Add change status action; ensure refetching on mutation
1aurend Mar 12, 2026
cf2c6d2
[E] Add placeholder for agreement to create form
1aurend Mar 12, 2026
5633768
[E] Remove history tab from my-reviews
1aurend Mar 12, 2026
574157b
[E] Continue refining control visibility conditions
1aurend Mar 12, 2026
f4f8534
[F] Add my-reviews route + request review action
1aurend Mar 12, 2026
7085911
[F] Wire up publish list + single publish action
1aurend Mar 13, 2026
590d04a
[B] Fix loading state on new submission form
1aurend Mar 13, 2026
acddb10
[E] Wire up depositor dashboard; improve messages
1aurend Mar 13, 2026
ae9967b
[C] Run relay compiler after schema updates
1aurend Mar 16, 2026
ef6e5cc
[E] Hide my-reviews link when depositing disabled or user can't review
1aurend Mar 16, 2026
f76a00e
[E] Auto open target on configure; improve form layout + copy
1aurend Mar 26, 2026
3664230
[F] Add submissions section to collections; add reviewers route
1aurend Mar 26, 2026
f767af7
[F] Convert global settings from route to drawer
1aurend Mar 26, 2026
f1928bd
[E] Add depositor name to submission lists
1aurend Mar 30, 2026
6318e1a
[F] Rework new submission form + access request workflow
1aurend Mar 30, 2026
27ecc9a
[F] Add keyword search UI to submission/review lists
1aurend Mar 31, 2026
bae3862
[F] Build read-only view for submissions
1aurend Mar 31, 2026
121fcac
[E] Split submission update form from item; adjust core properties
1aurend Mar 31, 2026
6db63cf
[C] Hide review nav for now
1aurend Mar 31, 2026
219a4ca
[B] Unhide reviews tab on /my-submissions
1aurend Mar 31, 2026
f2823ec
[E] Remove submission edit route; conditionally render form; add inst…
1aurend Mar 31, 2026
8cc6ee4
[E] Add request revisions to decision options; update form labels
1aurend Mar 31, 2026
421e725
[F] Build column filter inputs; wire up for submissions
1aurend Apr 2, 2026
b597c18
[F] Add preview link to submission layout
1aurend Apr 2, 2026
3d7650b
[E] Update filter ux + links in publish list
1aurend Apr 2, 2026
7037bb6
[E] Update filter ux on reviews list
1aurend Apr 3, 2026
67bed23
[E] Add reviewer instructions to review form
1aurend Apr 3, 2026
6f50f3c
[B] Prevent typeahead from expanding beyond modal
1aurend Apr 3, 2026
fb2b3a0
[C] Update schema
1aurend May 4, 2026
0924e33
[C] Add CLAUDE.md
1aurend May 4, 2026
8eacff2
[E] Add agreementAccepted to createSubmission payload
1aurend May 4, 2026
8209f21
[C] Fix style props passed to dom
1aurend May 4, 2026
38f1c84
[E] Check submittableVersions in collection submission configure
1aurend May 4, 2026
17b5cc9
[E] Additional submission target configure improvements
1aurend May 4, 2026
8a311e1
[B] Ensure clearing search clears url param
1aurend May 4, 2026
a6aeeab
[E] Wire up search on submission lists
1aurend May 4, 2026
b83543e
[F] Add contributor form to submission update
1aurend May 5, 2026
237a5d6
[E] Implement submittable + instructions in schema form fields
1aurend May 5, 2026
5637ee0
[E] Improve submission readonly view
1aurend May 5, 2026
fca425c
[F] Wire up bulk publish
1aurend May 5, 2026
cebfb0d
[B] Ensure mobile menu closes on navigate
1aurend May 5, 2026
0ca74f8
[E] Add user submissions links to mobile nav
1aurend May 5, 2026
15b5e9b
[F] Add loading bar to mutations + navigation
1aurend May 6, 2026
70d62d2
[B] Hide published from review list
1aurend May 6, 2026
4e07271
[B] Handle communities in global search results
1aurend May 6, 2026
f6b33ec
[C] Remove unused deps
1aurend May 6, 2026
ab2930b
[C] Minor dep bumps
1aurend May 6, 2026
820e1e9
[C] Lint
1aurend May 6, 2026
889c640
[E] Hide search + improve mobile menu for depositors
1aurend May 12, 2026
d2c9eff
[B] Ensure status badge fits column
1aurend May 12, 2026
2a4b168
[E] Add option to show global agreement in create form
1aurend May 12, 2026
d99f33e
[E] Make keywords field wide when submission
1aurend May 12, 2026
a509768
[E] Remove placeholders; improve default values
1aurend May 12, 2026
2c6c04c
[C] Fix i18nKey for "options"
1aurend May 12, 2026
c98e916
[C] Fix missing depositing i18nKeys
1aurend May 12, 2026
731cd72
[F] Wire up reviewers list + remove reviewer
1aurend May 13, 2026
746d6d6
[F] Add count badges to my submissions + reviews
1aurend May 13, 2026
35dddcd
[B] Fix button type on TargetStep
1aurend Jun 2, 2026
177f107
[C] Update preview links to match FE
1aurend Jun 2, 2026
92a025e
[E] Adjust some labels + messages
1aurend Jun 2, 2026
09dfca1
[F] Build review detail modal; add modal to table actions
1aurend Jun 2, 2026
88127b5
[E] Convert review form to MutationForm; update refetch tags
1aurend Jun 3, 2026
f86df51
[E] Add darker yellow for now
1aurend Jun 3, 2026
246cace
[B] Add resolution for @codemirror/state
1aurend Jun 17, 2026
d51a331
[B] Fix node version in admin package.json
1aurend Jun 17, 2026
40010b3
feat: add delete draft submission
1aurend Jul 9, 2026
79a4b8a
feat: add option to add contributor to submission form
1aurend Jul 9, 2026
0c9e215
feat: add new submission button to depositor dashboard
1aurend Jul 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
34 changes: 7 additions & 27 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,34 +14,14 @@ jobs:
name: Lint Javascript

steps:
- name: "Check out code"
uses: actions/checkout@v4

- name: "Install Node"
uses: actions/setup-node@v4
with:
node-version: "24.x"

- name: "Restore Node dependencies from cache"
uses: actions/cache@v4
- uses: actions/checkout@v4
- run: corepack enable
- uses: actions/setup-node@v4
with:
path: node_modules
key: ${{ runner.OS }}-node-module-cache-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.OS }}-node-module-cache-

- name: "Install Node dependencies"
env:
NODE_ENV: development
run: |
corepack enable
yarn install
working-directory: ./

- name: "Lint Client"
run: |
yarn lint
working-directory: ./
node-version-file: "package.json"
cache: "yarn"
- run: yarn install
- run: yarn lint

build:
runs-on: ubuntu-latest
Expand Down
91 changes: 91 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

NGLP Web Delivery Platform (WDP) client — a Yarn Workspaces + Turbo monorepo with the admin Next.js app and shared packages. The backend is a GraphQL API (Meru).

## Common Commands

```sh
yarn install # Install all dependencies
yarn dev # Start admin app (:3000)
yarn build # Build the app
yarn start # Start the built admin app
yarn lint # Lint all packages
yarn fix # Auto-fix lint issues
yarn types # TypeScript type-check all packages
yarn schema # Regenerate GraphQL schema + codegen types
yarn relay # Compile Relay artifacts
```

To run commands for a single workspace: `yarn workspace @wdp/admin run <script>` (or `@wdp/lib`).

## Monorepo Structure

| Package | Path | Description |
|---------|------|-------------|
| `@wdp/admin` | `packages/admin` | Admin app — Next.js **Pages Router**, styled-components, Keycloak SSO |
| `@wdp/lib` | `packages/lib` | Shared components, hooks, contexts, theme, helpers |
| `@wdp/eslint` | `packages/eslint` | Shared ESLint flat config |
| `@wdp/tsconfig` | `packages/tsconfig` | Shared TypeScript config |

## Architecture

### Admin app

Uses the Next.js **Pages Router**, Keycloak SSO via `@react-keycloak/ssr`, styled-components for styling, and `next-i18next` for translations. Provider hierarchy: `SSRKeycloakProvider → KeycloakRelayProvider → AppContextProvider`.

### GraphQL + Relay

Data fetching uses **Relay Runtime** with GraphQL. The workflow:
1. Write GraphQL queries/mutations/fragments inline with `graphql` tagged templates
2. Run `yarn relay` to compile Relay artifacts into `__generated__/` directories
3. Run `yarn schema` to regenerate `schema.graphql` and TypeScript types from the API

The admin app has its own `relay.config.js`, `schema.graphql`, and `codegen.ts`. Custom scalar types: `Slug`, `ISO8601DateTime`, `ISO8601Date` (all map to `string`).

### Shared library (`@wdp/lib`)

Exports shared code consumed by the admin app: `api` (contexts, hooks, components for Relay/query state), `theme`, `atomic` components, `routes`, `hooks`, `helpers`, `keycloak`, `search`, and `svgs`.

### Component organization

Components follow an atomic design pattern:
- `atomic/` — small reusable UI (buttons, inputs, links); not tied to API data
- `composed/` — larger composed components; can be tied to API data
- `factories/` — mapped components with shared props (e.g., icon factories)
- `form/` — form components and scaffolding (uses react-hook-form)
- `layout/` — grids, cards, layout primitives
- `global/` — app-wide components (header, footer, navigation)
- `svgs/` — icons and logos

Naming convention: lowercase plural folders for collections (`buttons/`), camelCase singular for single components (`Header/`). Each component folder contains `index.tsx`, `ComponentName.tsx`, and `styles.ts`.

### Styling

styled-components with a theme system in `/theme/`.

### State management

React Context for app state (`PageContext`, `QueryStateContext`, `QueryVariablesContext`, `RouterContext`, `RelayRecordSubscribeContext`). Relay handles server data caching. Forms use react-hook-form.

### Coding conventions

- **Use Relay-generated types for form fields.** Don't write custom `Fields` types for `MutationForm` — import the mutation input type (e.g. `SubmissionTargetConfigureInput`) from the generated `@/relay/` types and use it directly. See `HarvestAttemptCreateForm/FromSource.tsx` for the pattern.
- **Don't over-memoize.** Avoid `useMemo` for cheap computations (mapping arrays, filtering). Avoid `useRef` to work around stale closures — add the value to the dependency array instead. Only reach for `useMemo`/`useRef` when there's a measurable performance reason.

### Authentication

Keycloak SSO via `@react-keycloak/ssr` with silent SSO check.

### Environment

- Node 24.x, Yarn 4.13.0 (with node-modules linker)
- Key env vars: `NEXT_PUBLIC_API_URL` (GraphQL endpoint), `NEXT_PUBLIC_TUS_URL` (file uploads via Tus protocol), Keycloak config vars
- Sandbox API: `https://api.sandbox.meru.host/graphql`

## CI

GitHub Actions runs `yarn lint` and `yarn build:ci` on pushes/PRs to main. No automated test suite.
14 changes: 6 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,16 @@
"description": "NGLP Web Delivery Platform client application",
"main": "index.js",
"engines": {
"node": "20.x"
"node": "24.x"
},
"packageManager": "yarn@4.13.0",
"resolutions": {
"@codemirror/state": "^6.6.0"
},
"scripts": {
"dev": "yarn workspace @wdp/admin run dev",
"build": "scripts/do.sh build",
"build:ci": "yarn build:admin",
"build:admin": "yarn workspace @wdp/admin run build",
"build:ci": "yarn workspace @wdp/admin run build",
"start": "scripts/do.sh start",
"start:admin": "yarn workspace @wdp/admin run next start -p ${PORT:-3000}",
"lint": "concurrently -c \"auto\" \"yarn:lint:*\"",
Expand Down Expand Up @@ -53,10 +55,6 @@
"devDependencies": {
"@yarnpkg/types": "^4.0.1",
"concurrently": "^8.2.2",
"turbo": "^2.5.3"
},
"dependencies": {
"next-auth": "^4.24.7",
"react-hook-form": "7.53.0"
"turbo": "^2.9.9"
}
}
Loading
Loading