import { useAuthSlice } from "@/app/providers";
import type { User } from "@/entities/user";
import { getPrimaryRole, hasRole } from "@/shared/lib/RBAC";
import { PageContainer } from "@/shared/ui/PageContainer";
import { Link } from "react-router";

export const ManagePage: React.FC = () => {
  const { user } = useAuthSlice();

  if (!user) {
    return null;
  }

  return (
    <PageContainer hasBackIcon={false} name="Manage">
      <div className="flex flex-col gap-7 px-5 py-9">{manageView(user)}</div>
    </PageContainer>
  );
};

const manageView = (user: User): React.ReactNode => {
  // Show Master view if user has master role (highest priority)
  if (hasRole(user.roles, "master")) {
    return <MasterView />;
  }

  // Otherwise use primary role to determine view
  const primaryRole = getPrimaryRole(user.roles);

  switch (primaryRole) {
    case "localprovider":
      return <LocalProviderView />;
    case "verifiedshaman":
      return <VerifiedShamanView />;
    default:
      return null;
  }
};

const VerifiedShamanView = (): React.ReactNode => (
  <Link
    className="card border-primary/30 text-center text-xl py-5"
    to="/request-place"
  >
    Request event place
  </Link>
);

const LocalProviderView = (): React.ReactNode => (
  <>
    <Link
      className="card border-primary/30 text-center text-xl py-5"
      to="/manage/place"
    >
      Manage places
    </Link>
    <Link
      className="card border-primary/30 text-center text-xl py-5"
      to="/manage/staff"
    >
      Manage staff
    </Link>
    <Link
      className="card border-primary/30 text-center text-xl py-5"
      to="/manage/verifiedshamans"
    >
      Manage verified shamans
    </Link>
  </>
);

const MasterView = (): React.ReactNode => (
  <Link
    className="card border-primary/30 text-center text-xl py-5"
    to="/manage/localproviders"
  >
    Manage local providers
  </Link>
);

Homonyms

cyberia/research/events/client/src/pages/txhash/index.tsx
cyberia/research/events/client/src/pages/place/index.tsx
cyberia/research/events/client/src/pages/user/index.tsx
cyberia/research/events/client/src/pages/purchase/index.tsx
cyberia/research/events/client/src/pages/account/index.tsx
cyberia/research/events/client/src/pages/notifications/index.tsx
cyberia/research/events/client/src/pages/shaman-verification/index.tsx
cyberia/research/events/client/src/pages/404/index.tsx
cyberia/research/events/client/src/pages/map/index.tsx
cyberia/research/events/client/src/pages/events/index.tsx
cyberia/research/events/client/src/pages/socials/index.tsx
cyberia/research/events/client/src/pages/home/index.tsx
cyberia/research/events/client/src/pages/events/attendees/index.tsx
cyberia/research/events/client/src/pages/events/create/index.tsx
cyberia/research/events/client/src/pages/events/details/index.tsx
cyberia/research/events/client/src/pages/manage/verifiedshamans/index.tsx
cyberia/research/events/client/src/pages/manage/staff/index.tsx
cyberia/research/events/client/src/pages/manage/verification-stats/index.tsx
cyberia/research/events/client/src/pages/manage/place/index.tsx
cyberia/research/events/client/src/pages/events/edit/index.tsx
cyberia/research/events/client/src/pages/manage/localprovider/index.tsx
cyberia/research/events/client/src/pages/manage/place/update/index.tsx
cyberia/research/events/client/src/pages/manage/place/create/index.tsx
cyberia/research/events/client/src/pages/account/distribution-profiles/create/index.tsx
cyberia/research/events/client/src/pages/manage/place/request/index.tsx

Graph