Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
a02615e
feat: optional project admin assignment on project creation
kyle-ssg May 22, 2026
52bec32
feat: unified picker for project administrators on project creation
kyle-ssg May 22, 2026
ca5654a
refactor(project-admin): show entity type prefix in admin chip
kyle-ssg May 22, 2026
69598d4
style(project-admin): widen and lengthen the admin picker dropdown
kyle-ssg May 22, 2026
285d0f9
feat(project-admin): autofocus search when admin picker opens
kyle-ssg May 22, 2026
cf68fcd
style(project-admin): semibold weight for chip type prefix
kyle-ssg May 22, 2026
91e5822
style(project-admin): use fw-semibold class for chip type prefix
kyle-ssg May 22, 2026
2334963
feat(settings-button): add dropdown slot for inline popovers
kyle-ssg May 22, 2026
0529e8a
refactor(project-admin): drop group support from admin picker
kyle-ssg May 22, 2026
465e237
refactor(project-admin): heading + Users/Roles sections for admin picker
kyle-ssg May 22, 2026
c8da1dd
fix(project-admin): read admin selections from refs in close handler
kyle-ssg May 22, 2026
2b8dd54
refactor(project-admin): use RTK mutations for permission assignment
kyle-ssg May 22, 2026
51b7a7b
refactor(project-admin): move createProjectUserPermission to useUserP…
kyle-ssg May 22, 2026
06f2600
fix(project-admin): guard close handler against null data, ref onSave
kyle-ssg May 22, 2026
e2020cb
refactor(project-admin): convert CreateProject to TypeScript
kyle-ssg May 22, 2026
c6af069
refactor(settings-button): drop unused description prop
kyle-ssg May 22, 2026
e7975de
fix(project-admin): handle partial admin assignment failure and trim …
kyle-ssg May 22, 2026
1863489
docs(project-admin): drop groups from admin picker description
kyle-ssg May 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions frontend/common/services/useRolePermission.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@ export const rolePermissionService = service
.enhanceEndpoints({ addTagTypes: ['rolePermission'] })
.injectEndpoints({
endpoints: (builder) => ({
createProjectRolePermission: builder.mutation<
Res['rolePermission'],
Req['createProjectRolePermission']
>({
invalidatesTags: () => [{ type: 'rolePermission' }],
query: (query: Req['createProjectRolePermission']) => ({
body: query.body,
method: 'POST',
url: `organisations/${query.organisation_id}/roles/${query.role_id}/projects-permissions/`,
}),
}),

createRolePermissions: builder.mutation<
Res['rolePermission'],
Req['createRolePermission']
Expand Down Expand Up @@ -165,6 +177,7 @@ export async function createRolePermissions(
// END OF FUNCTION_EXPORTS

export const {
useCreateProjectRolePermissionMutation,
useCreateRolePermissionsMutation,
useGetRoleEnvironmentPermissionsQuery,
useGetRoleOrganisationPermissionsQuery,
Expand Down
12 changes: 12 additions & 0 deletions frontend/common/services/useUserPermissions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,17 @@ export const userPermissionsService = service
.enhanceEndpoints({ addTagTypes: ['UserPermissions'] })
.injectEndpoints({
endpoints: (builder) => ({
createProjectUserPermission: builder.mutation<
Res['userPermissions'],
Req['createProjectUserPermission']
>({
invalidatesTags: [{ id: 'LIST', type: 'UserPermissions' }],
query: ({ body, projectId }: Req['createProjectUserPermission']) => ({
body,
method: 'POST',
url: `projects/${projectId}/user-permissions/`,
}),
}),
getUserPermissions: builder.query<
Res['userPermissions'],
Req['getUserPermissions']
Expand Down Expand Up @@ -33,6 +44,7 @@ export async function getUserPermissions(
// END OF FUNCTION_EXPORTS

export const {
useCreateProjectUserPermissionMutation,
useGetUserPermissionsQuery,
// END OF EXPORTS
} = userPermissionsService
Expand Down
17 changes: 17 additions & 0 deletions frontend/common/types/requests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,15 @@ export type Req = {
organisation_id: number
role_id: number
}
createProjectRolePermission: {
organisation_id: number
role_id: number
body: {
admin?: boolean
permissions: RolePermission['permissions']
project: number
}
}
updateRolePermission: Req['createRolePermission'] & { id: number }
deleteRolePermission: { organisation_id: number; role_id: number }

Expand Down Expand Up @@ -639,6 +648,14 @@ export type Req = {
deleteProject: { id: number }
migrateProject: { id: number }
getProjectPermissions: { projectId: number }
createProjectUserPermission: {
projectId: number
body: {
admin?: boolean
permissions: string[]
user: number
}
}
createGroup: {
orgId: number
data: Omit<UserGroup, 'id' | 'users'>
Expand Down
3 changes: 3 additions & 0 deletions frontend/web/components/SettingsButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ type SettingsButtonType = {
onClick: () => void
children: ReactNode
content?: ReactNode
dropdown?: ReactNode
feature?: PaidFeature
}

const SettingsButton: FC<SettingsButtonType> = ({
children,
content,
dropdown,
feature,
onClick,
}) => {
Expand All @@ -39,6 +41,7 @@ const SettingsButton: FC<SettingsButtonType> = ({
{!!feature && <PlanBasedBanner feature={feature} theme={'badge'} />}
</Row>
</Row>
{dropdown}
{content}
</>
)
Expand Down
125 changes: 0 additions & 125 deletions frontend/web/components/modals/CreateProject.js

This file was deleted.

Loading
Loading