refactor: remove can_sudo from department create/edit flow
This commit is contained in:
+3
-4
@@ -1067,14 +1067,14 @@ export const api = {
|
|||||||
request<{ departments: Department[]; count: number }>(`/organizations/${orgId}/departments`, {}, true, requestConfig),
|
request<{ departments: Department[]; count: number }>(`/organizations/${orgId}/departments`, {}, true, requestConfig),
|
||||||
|
|
||||||
// Create department
|
// Create department
|
||||||
createDepartment: (orgId: string, name: string, description?: string, canSudo?: boolean, requestConfig?: RequestConfig) =>
|
createDepartment: (orgId: string, name: string, description?: string, requestConfig?: RequestConfig) =>
|
||||||
request<{ department: Department }>(`/organizations/${orgId}/departments`, {
|
request<{ department: Department }>(`/organizations/${orgId}/departments`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: JSON.stringify({ name, description, can_sudo: canSudo }),
|
body: JSON.stringify({ name, description }),
|
||||||
}, true, requestConfig),
|
}, true, requestConfig),
|
||||||
|
|
||||||
// Update department
|
// Update department
|
||||||
updateDepartment: (orgId: string, deptId: string, data: { name?: string; description?: string; can_sudo?: boolean }, requestConfig?: RequestConfig) =>
|
updateDepartment: (orgId: string, deptId: string, data: { name?: string; description?: string }, requestConfig?: RequestConfig) =>
|
||||||
request<{ department: Department }>(`/organizations/${orgId}/departments/${deptId}`, {
|
request<{ department: Department }>(`/organizations/${orgId}/departments/${deptId}`, {
|
||||||
method: 'PATCH',
|
method: 'PATCH',
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data),
|
||||||
@@ -1780,7 +1780,6 @@ export interface Department {
|
|||||||
organization_id: string;
|
organization_id: string;
|
||||||
name: string;
|
name: string;
|
||||||
description: string | null;
|
description: string | null;
|
||||||
can_sudo: boolean;
|
|
||||||
created_at: string;
|
created_at: string;
|
||||||
updated_at: string;
|
updated_at: string;
|
||||||
deleted_at: string | null;
|
deleted_at: string | null;
|
||||||
|
|||||||
@@ -390,7 +390,7 @@ export default function DepartmentsPage() {
|
|||||||
const [selectedPrincipalId, setSelectedPrincipalId] = useState("");
|
const [selectedPrincipalId, setSelectedPrincipalId] = useState("");
|
||||||
const [isLinking, setIsLinking] = useState(false);
|
const [isLinking, setIsLinking] = useState(false);
|
||||||
const [editingDept, setEditingDept] = useState<Department | null>(null);
|
const [editingDept, setEditingDept] = useState<Department | null>(null);
|
||||||
const [formData, setFormData] = useState({ name: "", description: "", can_sudo: false });
|
const [formData, setFormData] = useState({ name: "", description: "" });
|
||||||
const [expandedPolicies, setExpandedPolicies] = useState<Set<string>>(new Set());
|
const [expandedPolicies, setExpandedPolicies] = useState<Set<string>>(new Set());
|
||||||
const [expandedMembers, setExpandedMembers] = useState<Set<string>>(new Set());
|
const [expandedMembers, setExpandedMembers] = useState<Set<string>>(new Set());
|
||||||
|
|
||||||
@@ -505,10 +505,9 @@ export default function DepartmentsPage() {
|
|||||||
const dept = await api.organizations.createDepartment(
|
const dept = await api.organizations.createDepartment(
|
||||||
orgId,
|
orgId,
|
||||||
formData.name,
|
formData.name,
|
||||||
formData.description || undefined,
|
formData.description || undefined
|
||||||
formData.can_sudo
|
|
||||||
);
|
);
|
||||||
setFormData({ name: "", description: "", can_sudo: false });
|
setFormData({ name: "", description: "" });
|
||||||
setIsCreateDialogOpen(false);
|
setIsCreateDialogOpen(false);
|
||||||
await fetchDepartments(orgId);
|
await fetchDepartments(orgId);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -523,9 +522,8 @@ export default function DepartmentsPage() {
|
|||||||
await api.organizations.updateDepartment(orgId, editingDept.id, {
|
await api.organizations.updateDepartment(orgId, editingDept.id, {
|
||||||
name: formData.name,
|
name: formData.name,
|
||||||
description: formData.description || undefined,
|
description: formData.description || undefined,
|
||||||
can_sudo: formData.can_sudo,
|
|
||||||
});
|
});
|
||||||
setFormData({ name: "", description: "", can_sudo: false });
|
setFormData({ name: "", description: "" });
|
||||||
setEditingDept(null);
|
setEditingDept(null);
|
||||||
setIsEditDialogOpen(false);
|
setIsEditDialogOpen(false);
|
||||||
await fetchDepartments(orgId);
|
await fetchDepartments(orgId);
|
||||||
@@ -548,7 +546,7 @@ export default function DepartmentsPage() {
|
|||||||
|
|
||||||
const openEditDialog = (dept: Department) => {
|
const openEditDialog = (dept: Department) => {
|
||||||
setEditingDept(dept);
|
setEditingDept(dept);
|
||||||
setFormData({ name: dept.name, description: dept.description || "", can_sudo: dept.can_sudo || false });
|
setFormData({ name: dept.name, description: dept.description || "" });
|
||||||
setIsEditDialogOpen(true);
|
setIsEditDialogOpen(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -574,7 +572,7 @@ export default function DepartmentsPage() {
|
|||||||
Manage departments and organize team members
|
Manage departments and organize team members
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<Button onClick={() => { setFormData({ name: "", description: "", can_sudo: false }); setIsCreateDialogOpen(true); }}>
|
<Button onClick={() => { setFormData({ name: "", description: "" }); setIsCreateDialogOpen(true); }}>
|
||||||
<Plus className="w-4 h-4 mr-2" />
|
<Plus className="w-4 h-4 mr-2" />
|
||||||
Create Department
|
Create Department
|
||||||
</Button>
|
</Button>
|
||||||
@@ -621,11 +619,7 @@ export default function DepartmentsPage() {
|
|||||||
<p className="font-medium text-foreground">
|
<p className="font-medium text-foreground">
|
||||||
{dept.name}
|
{dept.name}
|
||||||
</p>
|
</p>
|
||||||
{dept.can_sudo && (
|
|
||||||
<Badge variant="secondary" className="text-xs bg-amber-100 text-amber-800 dark:bg-amber-900 dark:text-amber-300">
|
|
||||||
Sudo enabled
|
|
||||||
</Badge>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
{dept.description && (
|
{dept.description && (
|
||||||
<p className="mt-1 text-sm text-muted-foreground">
|
<p className="mt-1 text-sm text-muted-foreground">
|
||||||
@@ -758,18 +752,6 @@ export default function DepartmentsPage() {
|
|||||||
rows={3}
|
rows={3}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center justify-between p-3 border rounded-lg bg-muted/30">
|
|
||||||
<div>
|
|
||||||
<Label className="text-base font-medium cursor-pointer">Allow sudo access</Label>
|
|
||||||
<p className="text-xs text-muted-foreground mt-1">Members of this department can use sudo</p>
|
|
||||||
</div>
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
checked={formData.can_sudo}
|
|
||||||
onChange={(e) => setFormData({ ...formData, can_sudo: e.target.checked })}
|
|
||||||
className="w-4 h-4 cursor-pointer"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<DialogFooter>
|
<DialogFooter>
|
||||||
<Button variant="outline" onClick={() => setIsCreateDialogOpen(false)}>
|
<Button variant="outline" onClick={() => setIsCreateDialogOpen(false)}>
|
||||||
@@ -811,18 +793,6 @@ export default function DepartmentsPage() {
|
|||||||
rows={3}
|
rows={3}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center justify-between p-3 border rounded-lg bg-muted/30">
|
|
||||||
<div>
|
|
||||||
<Label className="text-base font-medium cursor-pointer">Allow sudo access</Label>
|
|
||||||
<p className="text-xs text-muted-foreground mt-1">Members of this department can use sudo</p>
|
|
||||||
</div>
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
checked={formData.can_sudo}
|
|
||||||
onChange={(e) => setFormData({ ...formData, can_sudo: e.target.checked })}
|
|
||||||
className="w-4 h-4 cursor-pointer"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<DialogFooter>
|
<DialogFooter>
|
||||||
<Button variant="outline" onClick={() => setIsEditDialogOpen(false)}>
|
<Button variant="outline" onClick={() => setIsEditDialogOpen(false)}>
|
||||||
|
|||||||
Reference in New Issue
Block a user