mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-09 00:08:18 +00:00
feat: fix the settings preview for the business licence and changes request to the approval
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
import { ArrowRight, Clock } from "lucide-react";
|
||||
import { Link } from "react-router-dom";
|
||||
import { AlertTriangle, ArrowRight, Clock } from "lucide-react";
|
||||
import { api } from "@/services/api";
|
||||
import useAuth from "@/hooks/useAuth";
|
||||
import type { OnboardingRequirements } from "@/services/companies.service";
|
||||
@@ -148,16 +149,74 @@ export default function OnboardingResumeBanner({
|
||||
}
|
||||
|
||||
/**
|
||||
* Shown once onboarding is submitted but the company's operational profiles are
|
||||
* still being reviewed. Communicates that approval is per-profile and that
|
||||
* bookings unlock as each profile is cleared. Self-hides when nothing is pending.
|
||||
* Post-onboarding review banner. Surfaces (in priority order):
|
||||
* 1. A pending profile-edit review — the whole account is locked until an admin
|
||||
* approves the submitted changes.
|
||||
* 2. A rejected profile-edit review — links to Settings to amend & resubmit.
|
||||
* 3. Per-operational-profile approval — bookings unlock as each role clears.
|
||||
* Self-hides when there's nothing outstanding.
|
||||
*/
|
||||
export function AccountReviewBanner() {
|
||||
const { company } = useAuth();
|
||||
const { company, reviewStatus, reviewNote } = useAuth();
|
||||
const profiles = company?.company?.companyProfiles ?? [];
|
||||
const pending = profiles.filter((p) => p.status === "pending");
|
||||
const approved = profiles.filter((p) => p.status === "active");
|
||||
|
||||
// 1. Profile-edit review pending — the account-wide lock.
|
||||
if (reviewStatus === "pending") {
|
||||
return (
|
||||
<div className="border-b border-amber-200 bg-amber-50 px-6 py-3">
|
||||
<div className="mx-auto flex max-w-6xl items-center gap-3">
|
||||
<span className="flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-amber-100 text-amber-700">
|
||||
<Clock size={18} />
|
||||
</span>
|
||||
<span className="flex flex-col gap-0.5">
|
||||
<span className="text-sm font-semibold text-amber-900">
|
||||
Your profile changes are under review
|
||||
</span>
|
||||
<span className="text-xs text-amber-800">
|
||||
Editing and creating new contracts or bookings is paused until an
|
||||
administrator approves your submitted changes.
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// 2. Profile-edit review rejected — prompt to fix & resubmit.
|
||||
if (reviewStatus === "rejected") {
|
||||
return (
|
||||
<div className="border-b border-red-200 bg-red-50 px-6 py-3">
|
||||
<div className="mx-auto flex max-w-6xl flex-wrap items-center justify-between gap-3">
|
||||
<div className="flex items-center gap-3">
|
||||
<span className="flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-red-100 text-red-700">
|
||||
<AlertTriangle size={18} />
|
||||
</span>
|
||||
<span className="flex flex-col gap-0.5">
|
||||
<span className="text-sm font-semibold text-red-900">
|
||||
Your recent changes were not approved
|
||||
</span>
|
||||
<span className="text-xs text-red-800">
|
||||
{reviewNote
|
||||
? `Reviewer note: ${reviewNote}`
|
||||
: "Please update your details and resubmit for review."}
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<Link
|
||||
to="/settings"
|
||||
className="inline-flex items-center gap-2 rounded-lg bg-red-600 px-4 py-2 text-sm font-semibold text-white shadow-sm transition-transform hover:scale-[1.02]"
|
||||
>
|
||||
Review & resubmit
|
||||
<ArrowRight size={16} />
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// 3. Per-operational-profile approval (existing behaviour).
|
||||
if (profiles.length === 0 || pending.length === 0) return null;
|
||||
|
||||
const pendingLabel = pending
|
||||
|
||||
@@ -4,6 +4,7 @@ import { Paperclip } from "lucide-react";
|
||||
import { SmartFileInput } from "@edr/ui-common";
|
||||
import type { IFileUploadSetting } from "@edr/types/freight";
|
||||
|
||||
import { fileViewUrl } from "@/constants/apiConfig";
|
||||
import type { LicenseFile } from "@/services/companies.service";
|
||||
|
||||
const ROLE_LABELS: Record<string, string> = {
|
||||
@@ -107,10 +108,10 @@ export default function RoleLicenseStep({
|
||||
{hasExisting && (
|
||||
<Stack gap={4} mb="sm">
|
||||
{profile.existingFiles.map((f) => (
|
||||
<Group key={f.url} gap={6} wrap="nowrap">
|
||||
<Group key={f.id} gap={6} wrap="nowrap">
|
||||
<Paperclip size={13} className="text-edr-muted" />
|
||||
<Anchor
|
||||
href={f.url}
|
||||
href={fileViewUrl(f.id)}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
size="xs"
|
||||
|
||||
Reference in New Issue
Block a user