feat: add lead-only status change rule for boards and update related logic
This commit is contained in:
@@ -231,6 +231,9 @@ export default function EditBoardPage() {
|
||||
blockStatusChangesWithPendingApproval,
|
||||
setBlockStatusChangesWithPendingApproval,
|
||||
] = useState<boolean | undefined>(undefined);
|
||||
const [onlyLeadCanChangeStatus, setOnlyLeadCanChangeStatus] = useState<
|
||||
boolean | undefined
|
||||
>(undefined);
|
||||
const [successMetrics, setSuccessMetrics] = useState<string | undefined>(
|
||||
undefined,
|
||||
);
|
||||
@@ -425,6 +428,8 @@ export default function EditBoardPage() {
|
||||
blockStatusChangesWithPendingApproval ??
|
||||
baseBoard?.block_status_changes_with_pending_approval ??
|
||||
false;
|
||||
const resolvedOnlyLeadCanChangeStatus =
|
||||
onlyLeadCanChangeStatus ?? baseBoard?.only_lead_can_change_status ?? false;
|
||||
const resolvedSuccessMetrics =
|
||||
successMetrics ??
|
||||
(baseBoard?.success_metrics
|
||||
@@ -498,6 +503,7 @@ export default function EditBoardPage() {
|
||||
setBlockStatusChangesWithPendingApproval(
|
||||
updated.block_status_changes_with_pending_approval ?? false,
|
||||
);
|
||||
setOnlyLeadCanChangeStatus(updated.only_lead_can_change_status ?? false);
|
||||
setSuccessMetrics(
|
||||
updated.success_metrics
|
||||
? JSON.stringify(updated.success_metrics, null, 2)
|
||||
@@ -559,6 +565,7 @@ export default function EditBoardPage() {
|
||||
require_review_before_done: resolvedRequireReviewBeforeDone,
|
||||
block_status_changes_with_pending_approval:
|
||||
resolvedBlockStatusChangesWithPendingApproval,
|
||||
only_lead_can_change_status: resolvedOnlyLeadCanChangeStatus,
|
||||
success_metrics: resolvedBoardType === "general" ? null : parsedMetrics,
|
||||
target_date:
|
||||
resolvedBoardType === "general"
|
||||
@@ -924,6 +931,41 @@ export default function EditBoardPage() {
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-start gap-3 rounded-lg border border-slate-200 px-3 py-3">
|
||||
<button
|
||||
type="button"
|
||||
role="switch"
|
||||
aria-checked={resolvedOnlyLeadCanChangeStatus}
|
||||
aria-label="Only lead can change status"
|
||||
onClick={() =>
|
||||
setOnlyLeadCanChangeStatus(
|
||||
!resolvedOnlyLeadCanChangeStatus,
|
||||
)
|
||||
}
|
||||
disabled={isLoading}
|
||||
className={`mt-0.5 inline-flex h-6 w-11 shrink-0 items-center rounded-full border transition ${
|
||||
resolvedOnlyLeadCanChangeStatus
|
||||
? "border-emerald-600 bg-emerald-600"
|
||||
: "border-slate-300 bg-slate-200"
|
||||
} ${isLoading ? "cursor-not-allowed opacity-60" : "cursor-pointer"}`}
|
||||
>
|
||||
<span
|
||||
className={`inline-block h-5 w-5 rounded-full bg-white shadow-sm transition ${
|
||||
resolvedOnlyLeadCanChangeStatus
|
||||
? "translate-x-5"
|
||||
: "translate-x-0.5"
|
||||
}`}
|
||||
/>
|
||||
</button>
|
||||
<span className="space-y-1">
|
||||
<span className="block text-sm font-medium text-slate-900">
|
||||
Only lead can change status
|
||||
</span>
|
||||
<span className="block text-xs text-slate-600">
|
||||
Restrict status changes to the board lead.
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{gateways.length === 0 ? (
|
||||
|
||||
Reference in New Issue
Block a user