Skip to content

External project overview landing page - #1179

Closed
nabalma wants to merge 8 commits into
frontend-for-parent-project-and-subprojects-menufrom
external-project-overview-landing-page
Closed

External project overview landing page#1179
nabalma wants to merge 8 commits into
frontend-for-parent-project-and-subprojects-menufrom
external-project-overview-landing-page

Conversation

@nabalma

@nabalma nabalma commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

Note

Please review #1178 first if you haven't already.

Adds a Parent Projects table displaying the list of external projects . Each external project is described with its external ID, name, and number of associated Freezeman projects. Each row can be expanded to show the corresponding internal projects and their key information. The page also supports filtering Parent Projects by external project name.

image

@nabalma
nabalma requested review from UlysseFG and nafiz1001 August 7, 2026 15:49
Comment on lines 187 to 417

@nafiz1001 nafiz1001 Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes to this file should be backported to the #1178 PR since nothing new is being added (just corrections on changes made by the first PR)

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Comment on lines +95 to +96
const parentProjectColumns: ColumnsType<FMSParentProject> = [
{

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

parentProjectColumns should be in a useMemo like

const parentProjectColumns = useMemo<ColumnsType<FMSParentProject>>(() => [...], [...])

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Comment on lines +259 to +261
expandedRowRender: (parentProject) => {const internalProjects = (parentProject.projects ?? [])
.map((projectID) => internalProjectsByID[projectID])
.filter((project): project is FMSProject =>project !== undefined)

@nafiz1001 nafiz1001 Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(project): project is FMSProject =>project !== undefined

That's a really fascinating syntax. I was confused at first as to what it is. But now I get it.

expandedRowRender: (parentProject) => {const internalProjects = (parentProject.projects ?? [])

The const internalProjects should be on another line.

Lastly,
I believe it's better to use reduce than map+filter. (javascript sadly doesn't have mapFilter or filterMap)

nabalma added a commit that referenced this pull request Aug 11, 2026
nabalma added a commit that referenced this pull request Aug 11, 2026
placeholder="Search External project name"
value={selectedKeys[0]}
onChange={(event) => setSelectedKeys(event.target.value ? [event.target.value] : [])}
onPressEnter={() => confirm()}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Theres is discrepancy in the way the search behave compared to the rest of the app. Your approach is not bad but it clashes with other pages.

  1. Typically on pressing the search magnifying glass icon, the focus is given to the input field in order to allow direct entry instead of having to manually giving the focus to the fields first.
  2. Most (if not all) search in the app will perform a debounced search as the user type the search content in and a search is also performed on pressing enter before closing the modal window.
  3. A search on the external project ID would be good to make a quick search in case the user knows the ID.
    Matching the other pages behaviour would make it more natural to the user.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Noted, with Thanks. Working in progress ....

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Points 1,2,3 are fixed ... (using getFilterPropsForDescription)
image

@UlysseFG

Copy link
Copy Markdown
Collaborator

This is starting to shape up interestingly. I think in the future we should move the PI to the parent project in order to be able to filter by it... This can be done later.

dataIndex: 'external_id',
key: 'external_id',
width: 120,
render: (externalID: string, parentProject: FMSParentProject) => (<Link to={`/external-projects-overview/${parentProject.id}#submissions`}>{externalID}</Link>)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This link leads to nowhere yet. Keep each PR centered around itself. Make it so the link does not appear here unless there is a working destination. If you build a PR on top of the stack of PR you can add the link to the child PR once you define the destination. We want to be able to merge each PR being confident the app is self contained without having to worry about dead links and dangling parts.



<PageContent>
{error && (<Alert type="error" title={error} style={{ marginBottom: 16 }} />)}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure this would be very useful. The page would not render most likely if the backend was down. The actual information provided is very limited. I would tend to go for simplicity (removing error state) here given the small value of providing this error message to the user.

dataIndex: 'external_id',
key: 'external_id',
width: 120,
render: (externalID: string, parentProject: FMSParentProject) => (<Link to={`/external-projects-overview/${parentProject.id}#submissions`}>{externalID}</Link>)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what does #submissions points to ? Looks like it is left over from an older version.

@nabalma nabalma Aug 18, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed. I removed the link because the target details page is not part of this PR.

@nabalma

nabalma commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator Author

Closing this PR as it has been replaced by #1185, which consolidates the entire stack into a single PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants