[as] rename: SectionCollapsible 컴포넌트 shared 레이어로 이동

This commit is contained in:
2026-08-07 15:34:26 +09:00
parent 12a0a37d24
commit 07a625e03b
57 changed files with 133 additions and 129 deletions
@@ -4,7 +4,9 @@ import { Fragment } from "react";
import { ChevronRight } from "lucide-react";
import { useUserStore } from "@/shared/lib";
import type { ElaprDocPrgrsClientResponseDto } from "@/shared/model";
import { SectionCollapsible } from "@/shared/ui";
import { Tooltip, TooltipContent, TooltipTrigger } from "@/shared/ui/tooltip";
import { cn, Skeleton } from "@common/components";
@@ -61,16 +63,23 @@ function ElaprDocPrgrsStep({ item }: { item: ElaprDocPrgrsClientResponseDto }) {
}
function ElaprDocPrgrsStatus({ elaprDocNo }: ElaprDocPrgrsStatusProps) {
const userInfo = useUserStore((state) => state.userInfo);
const { data, isLoading } = useElaprDocPrgrsByDocNo(elaprDocNo);
const steps = sortByAtrzSeqNo(data ?? []);
if (userInfo?.dtlInstCd !== "ROLE_USER01") {
return null;
}
if (isLoading) {
return (
<div className="flex items-center gap-3 px-4 py-6">
<Skeleton className="h-24 flex-1 rounded-sm" />
<Skeleton className="h-24 flex-1 rounded-sm" />
<Skeleton className="h-24 flex-1 rounded-sm" />
</div>
<SectionCollapsible title="결재현황">
<div className="flex items-center gap-3 px-4 py-6">
<Skeleton className="h-24 flex-1 rounded-sm" />
<Skeleton className="h-24 flex-1 rounded-sm" />
<Skeleton className="h-24 flex-1 rounded-sm" />
</div>
</SectionCollapsible>
);
}
@@ -79,16 +88,18 @@ function ElaprDocPrgrsStatus({ elaprDocNo }: ElaprDocPrgrsStatusProps) {
}
return (
<div className="flex flex-wrap items-stretch justify-start gap-4 overflow-x-auto">
{steps.map((item, index) => (
<Fragment key={item.elaprPrgrsId ?? `${item.atrzSeqNo}-${item.aprvrUuid ?? index}`}>
<div className="flex items-center">
{index > 0 && <ChevronRight className="size-8 text-muted-foreground" />}
</div>
<ElaprDocPrgrsStep item={item} />
</Fragment>
))}
</div>
<SectionCollapsible title="결재현황">
<div className="flex flex-wrap items-stretch justify-start gap-4 overflow-x-auto">
{steps.map((item, index) => (
<Fragment key={item.elaprPrgrsId ?? `${item.atrzSeqNo}-${item.aprvrUuid ?? index}`}>
<div className="flex items-center">
{index > 0 && <ChevronRight className="size-8 text-muted-foreground" />}
</div>
<ElaprDocPrgrsStep item={item} />
</Fragment>
))}
</div>
</SectionCollapsible>
);
}
@@ -6,7 +6,6 @@ import { useUserStore } from "@/shared/lib";
import { useDesignCnstnMng } from "@/entities/design-cnstn";
import { ElaprDocPrgrsStatus } from "@/entities/elapr";
import { useRvwMnpwMngLoginUserList } from "@/entities/rvw-mnpw";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Skeleton } from "@common/components";
import { needsRoleUser01AtrzResolve } from "../lib/button-config";
@@ -80,9 +79,7 @@ function DesignViewPage({ id }: DesignViewPageProps) {
<div className="mt-6 space-y-4">
<BasicInfoSection det={detDto} />
<ContactInfoSection det={detDto} />
<SectionCollapsible title="결재현황">
<ElaprDocPrgrsStatus elaprDocNo={detDto.designCnstnDocNo} />
</SectionCollapsible>
<ElaprDocPrgrsStatus elaprDocNo={detDto.designCnstnDocNo} />
<BusinessScaleSection bizSclList={bizSclList} />
<AttachmentsSection esntlFileList={esntlFileList} etcFileList={etcFileList} />
<TechReviewOpinionSection
@@ -1,12 +1,12 @@
"use client";
import { formatFileSize } from "@/shared/lib/file-utils";
import { SectionCollapsible } from "@/shared/ui";
import { useDownloadAttachmentByAtflCd } from "@/entities/attach";
import type {
AtflMngClientResponseDto,
EsntlAtchFileMngTreeResponseDto,
} from "@/entities/design-cnstn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface AttachmentsSectionProps {
@@ -3,10 +3,10 @@
import { useState } from "react";
import { Controller, useFormContext } from "react-hook-form";
import { SectionCollapsible } from "@/shared/ui";
import { Field, FieldError, FieldGroup } from "@/shared/ui/field";
import { findCodeLabel, useCodeList } from "@/entities/code";
import { type BnsApplyData, BnsPickerDialog } from "@/widgets/bns-picker";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Button,
Input,
@@ -1,7 +1,7 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type { DesignCnstnMngResponseDto } from "@/entities/design-cnstn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface BasicInfoSectionProps {
@@ -1,7 +1,8 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type { BizSclTreeDto } from "@/entities/design-cnstn";
import { fmtNumber, indentPx, SectionCollapsible } from "@/widgets/pbadms-sprt";
import { fmtNumber, indentPx } from "@/widgets/pbadms-sprt";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface BusinessScaleSectionProps {
@@ -1,7 +1,7 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type { DesignCnstnMngResponseDto } from "@/entities/design-cnstn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface ContactInfoSectionProps {
@@ -7,10 +7,10 @@ import { Paperclip } from "lucide-react";
import { PROXY_HOST } from "@/shared/config";
import { dayjs, getDefaultFileKey, useTus } from "@/shared/lib";
import { TextShimmer } from "@/shared/ui";
import { SectionCollapsible } from "@/shared/ui";
import { Field, FieldLabel, FieldSet } from "@/shared/ui/field";
import { attachService } from "@/entities/attach";
import type { DesignCnstnRvwOpnnResponseDto } from "@/entities/design-cnstn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Button,
RadioGroup,
@@ -6,7 +6,7 @@ import { useUserStore } from "@/shared/lib";
import { ElaprDocPrgrsStatus } from "@/entities/elapr";
import { useFnrsCnsltnMng } from "@/entities/fnrs-cnsltn";
import { useRvwMnpwMngLoginUserList } from "@/entities/rvw-mnpw";
import { SectionCollapsible, SupplementDemandSection } from "@/widgets/pbadms-sprt";
import { SupplementDemandSection } from "@/widgets/pbadms-sprt";
import { Skeleton } from "@common/components";
import { needsRoleUser01AtrzResolve } from "../lib/button-config";
@@ -90,9 +90,7 @@ function FnrsViewPage({ id }: FnrsViewPageProps) {
<div className="mt-6 space-y-4">
<BasicInfoSection det={detDto} />
<ContactInfoSection det={detDto} />
<SectionCollapsible title="결재현황">
<ElaprDocPrgrsStatus elaprDocNo={detDto.fnrsCnsltnDocNo} />
</SectionCollapsible>
<ElaprDocPrgrsStatus elaprDocNo={detDto.fnrsCnsltnDocNo} />
<BusinessScaleSection bizSclList={bizSclList} />
<BusinessCostSection bizCstList={bizCstList} />
<FnrsSharSection fnrsSharList={fnrsSharList} />
@@ -1,12 +1,12 @@
"use client";
import { formatFileSize } from "@/shared/lib/file-utils";
import { SectionCollapsible } from "@/shared/ui";
import { useDownloadAttachmentByAtflCd } from "@/entities/attach";
import type {
AtflMngClientResponseDto,
EsntlAtchFileMngTreeResponseDto,
} from "@/entities/fnrs-cnsltn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface AttachmentsSectionProps {
@@ -3,10 +3,10 @@
import { useState } from "react";
import { Controller, useFormContext } from "react-hook-form";
import { SectionCollapsible } from "@/shared/ui";
import { Field, FieldError, FieldGroup, FieldLabel, FieldSet } from "@/shared/ui/field";
import { findCodeLabel, useCodeList } from "@/entities/code";
import { type BnsApplyData, BnsPickerDialog } from "@/widgets/bns-picker";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Button,
Checkbox,
@@ -1,7 +1,7 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type { FnrsCnsltnMngResponseDto } from "@/entities/fnrs-cnsltn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface BasicInfoSectionProps {
@@ -2,9 +2,9 @@
import { useMemo } from "react";
import { SectionCollapsible } from "@/shared/ui";
import type { BizCstTreeDto } from "@/entities/fnrs-cnsltn";
import { calcDiffPercent, fmtNumber, indentPx } from "@/widgets/pbadms-sprt";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
import { sortBizCstListByTreePath } from "../../lib/business-cost-utils";
@@ -1,8 +1,8 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type { BizSclTreeDto } from "@/entities/fnrs-cnsltn";
import { fmtNumber, indentPx } from "@/widgets/pbadms-sprt";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface BusinessScaleSectionProps {
@@ -2,8 +2,8 @@
import { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from "react";
import { SectionCollapsible } from "@/shared/ui";
import type { CklstRvwRsltTreeDto } from "@/entities/fnrs-cnsltn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@common/components";
import {
@@ -1,7 +1,7 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type { FnrsCnsltnMngResponseDto } from "@/entities/fnrs-cnsltn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface ContactInfoSectionProps {
@@ -2,8 +2,9 @@
import { useMemo } from "react";
import { SectionCollapsible } from "@/shared/ui";
import type { FnrsSharBizCstTreeDto } from "@/entities/fnrs-shar-se";
import { fmtNumber, indentPx, SectionCollapsible } from "@/widgets/pbadms-sprt";
import { fmtNumber, indentPx } from "@/widgets/pbadms-sprt";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface FnrsSharSectionProps {
@@ -7,10 +7,10 @@ import { Paperclip } from "lucide-react";
import { PROXY_HOST } from "@/shared/config";
import { dayjs, getDefaultFileKey, useTus } from "@/shared/lib";
import { TextShimmer } from "@/shared/ui";
import { SectionCollapsible } from "@/shared/ui";
import { Field, FieldLabel, FieldSet } from "@/shared/ui/field";
import { attachService } from "@/entities/attach";
import type { FnrsCnsltnRvwOpnnResponseDto } from "@/entities/fnrs-cnsltn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Button,
RadioGroup,
@@ -6,7 +6,7 @@ import { useUserStore } from "@/shared/lib";
import { ElaprDocPrgrsStatus } from "@/entities/elapr";
import { useInstlSncnDetail } from "@/entities/instl-sncn";
import { useRvwMnpwMngLoginUserList } from "@/entities/rvw-mnpw";
import { SectionCollapsible, SupplementDemandSection } from "@/widgets/pbadms-sprt";
import { SupplementDemandSection } from "@/widgets/pbadms-sprt";
import { Skeleton } from "@common/components";
import { needsRoleUser01AtrzResolve } from "../lib/button-config";
@@ -90,9 +90,7 @@ function InstlViewPage({ id }: InstlViewPageProps) {
<div className="mt-6 space-y-4">
<BasicInfoSection det={detDto} />
<ContactInfoSection det={detDto} />
<SectionCollapsible title="결재현황">
<ElaprDocPrgrsStatus elaprDocNo={detDto.instlSncnDocNo} />
</SectionCollapsible>
<ElaprDocPrgrsStatus elaprDocNo={detDto.instlSncnDocNo} />
<BusinessScaleSection bizSclList={bizSclList} />
<BusinessCostSection bizCstList={bizCstList} />
<ChecklistSection
@@ -1,12 +1,12 @@
"use client";
import { formatFileSize } from "@/shared/lib/file-utils";
import { SectionCollapsible } from "@/shared/ui";
import { useDownloadAttachmentByAtflCd } from "@/entities/attach";
import type {
AtflMngClientResponseDto,
EsntlAtchFileMngTreeResponseDto,
} from "@/entities/instl-sncn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface AttachmentsSectionProps {
@@ -3,10 +3,10 @@
import { useState } from "react";
import { Controller, useFormContext } from "react-hook-form";
import { SectionCollapsible } from "@/shared/ui";
import { Field, FieldError, FieldGroup, FieldLabel, FieldSet } from "@/shared/ui/field";
import { findCodeLabel, useCodeList } from "@/entities/code";
import { type BnsApplyData, BnsPickerDialog } from "@/widgets/bns-picker";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Button,
Checkbox,
@@ -1,7 +1,7 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type { InstlSncnMngResponseDto } from "@/entities/instl-sncn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface BasicInfoSectionProps {
@@ -2,9 +2,9 @@
import { useMemo } from "react";
import { SectionCollapsible } from "@/shared/ui";
import type { BizCstTreeDto } from "@/entities/instl-sncn";
import { calcDiffPercent, fmtNumber, indentPx } from "@/widgets/pbadms-sprt";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
import { sortBizCstListByTreePath } from "../../lib/business-cost-utils";
@@ -1,8 +1,8 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type { BizSclTreeDto } from "@/entities/instl-sncn";
import { fmtNumber, indentPx } from "@/widgets/pbadms-sprt";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface BusinessScaleSectionProps {
@@ -2,8 +2,8 @@
import { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from "react";
import { SectionCollapsible } from "@/shared/ui";
import type { CklstRvwRsltTreeDto, ReviewStepCode } from "@/entities/instl-sncn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@common/components";
import {
@@ -1,7 +1,7 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type { InstlSncnMngResponseDto } from "@/entities/instl-sncn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface ContactInfoSectionProps {
@@ -7,10 +7,10 @@ import { Paperclip } from "lucide-react";
import { PROXY_HOST } from "@/shared/config";
import { dayjs, getDefaultFileKey, useTus } from "@/shared/lib";
import { TextShimmer } from "@/shared/ui";
import { SectionCollapsible } from "@/shared/ui";
import { Field, FieldLabel, FieldSet } from "@/shared/ui/field";
import { attachService } from "@/entities/attach";
import type { InstlSncnRvwOpnnResponseDto, ReviewStepCode } from "@/entities/instl-sncn";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Button,
RadioGroup,
@@ -3,13 +3,13 @@
import { useEffect, useMemo, useState } from "react";
import { useAlertStore } from "@/shared/lib";
import { SectionCollapsible } from "@/shared/ui";
import {
type CmCdAdstDstrComboResponseDto,
useFindGugunCombo,
useFindSidoCombo,
} from "@/entities/adstdstr";
import { useLvNowDmgMtncGnsvy, useNowDmgMtncGnsvy } from "@/entities/dc";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Button,
Dialog,
@@ -3,12 +3,12 @@
import { Paperclip } from "lucide-react";
import { formatFileSize } from "@/shared/lib/file-utils";
import { SectionCollapsible } from "@/shared/ui";
import { useDownloadAttachmentByAtflCd } from "@/entities/attach";
import type {
AtflMngClientResponseDto,
EsntlAtchFileMngTreeResponseDto,
} from "@/entities/sewer-bsc-plan";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface AttachmentsSectionProps {
@@ -3,8 +3,8 @@
import { Controller, useFormContext } from "react-hook-form";
import { useUserStore } from "@/shared/lib";
import { SectionCollapsible } from "@/shared/ui";
import { Field, FieldError } from "@/shared/ui/field";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Input,
Select,
@@ -1,10 +1,10 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type {
SewerBscPlanDtlResponseDto,
SewerBscPlanResponseDto,
} from "@/entities/sewer-bsc-plan";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface BasicInfoSectionProps {
@@ -3,9 +3,10 @@
import { useEffect, useMemo } from "react";
import { useFormContext, useWatch } from "react-hook-form";
import { SectionCollapsible } from "@/shared/ui";
import { Field } from "@/shared/ui/field";
import { useAcntgSeMngTree } from "@/entities/acntg";
import { buildAcntgCostItems, SectionCollapsible } from "@/widgets/pbadms-sprt";
import { buildAcntgCostItems } from "@/widgets/pbadms-sprt";
import {
Input,
Skeleton,
@@ -2,12 +2,13 @@
import { useMemo } from "react";
import { SectionCollapsible } from "@/shared/ui";
import { useAcntgSeMngTree } from "@/entities/acntg";
import type {
SewerBscPlanBizCstResponseDto,
SewerBscPlanDtlResponseDto,
} from "@/entities/sewer-bsc-plan";
import { buildAcntgCostItems, fmtNumber, SectionCollapsible } from "@/widgets/pbadms-sprt";
import { buildAcntgCostItems, fmtNumber } from "@/widgets/pbadms-sprt";
import {
Skeleton,
Table,
@@ -2,8 +2,8 @@
import { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from "react";
import { SectionCollapsible } from "@/shared/ui";
import type { CklstRvwRsltTreeDto } from "@/entities/sewer-bsc-plan";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@common/components";
import {
@@ -1,7 +1,7 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type { SewerBscPlanDtlResponseDto } from "@/entities/sewer-bsc-plan";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Table, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface ContactInfoSectionProps {
@@ -3,9 +3,10 @@
import { useMemo } from "react";
import { useFormContext, useWatch } from "react-hook-form";
import { SectionCollapsible } from "@/shared/ui";
import { Field } from "@/shared/ui/field";
import { useAcntgSeMngTree } from "@/entities/acntg";
import { buildAcntgCostItems, SectionCollapsible } from "@/widgets/pbadms-sprt";
import { buildAcntgCostItems } from "@/widgets/pbadms-sprt";
import {
cn,
Input,
@@ -2,12 +2,13 @@
import { useMemo } from "react";
import { SectionCollapsible } from "@/shared/ui";
import { useAcntgSeMngTree } from "@/entities/acntg";
import type {
SewerBscPlanDtlResponseDto,
SewerBscPlanFnrsCstResponseDto,
} from "@/entities/sewer-bsc-plan";
import { buildAcntgCostItems, fmtNumber, SectionCollapsible } from "@/widgets/pbadms-sprt";
import { buildAcntgCostItems, fmtNumber } from "@/widgets/pbadms-sprt";
import {
Skeleton,
Table,
@@ -4,8 +4,8 @@ import { useState } from "react";
import { useFormContext, useWatch } from "react-hook-form";
import dynamic from "next/dynamic";
import { SectionCollapsible } from "@/shared/ui";
import { Field } from "@/shared/ui/field";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Button,
Input,
@@ -1,10 +1,11 @@
"use client";
import { SectionCollapsible } from "@/shared/ui";
import type {
SewerBscPlanDtlResponseDto,
SewerBscPlanOtlnResponseDto,
} from "@/entities/sewer-bsc-plan";
import { fmtNumber, SectionCollapsible } from "@/widgets/pbadms-sprt";
import { fmtNumber } from "@/widgets/pbadms-sprt";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
interface OutlineSectionProps {
@@ -7,10 +7,10 @@ import { Paperclip } from "lucide-react";
import { PROXY_HOST } from "@/shared/config";
import { dayjs, getDefaultFileKey, useTus } from "@/shared/lib";
import { TextShimmer } from "@/shared/ui";
import { SectionCollapsible } from "@/shared/ui";
import { Field, FieldLabel, FieldSet } from "@/shared/ui/field";
import { attachService } from "@/entities/attach";
import type { SewerBscPlanRvwOpnnResponseDto } from "@/entities/sewer-bsc-plan";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Button,
RadioGroup,
@@ -7,11 +7,11 @@ import { useConfirm } from "@frontend-opensource/use-react-hooks";
import { getDefaultFileKey, useTus } from "@/shared/lib";
import { TextShimmer } from "@/shared/ui";
import { SectionCollapsible } from "@/shared/ui";
import { Field } from "@/shared/ui/field";
import { attachService } from "@/entities/attach";
import { useFacilityList } from "@/entities/bns-if";
import { useNowDmgMtncGnsvy } from "@/entities/dc";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Button,
Checkbox,
@@ -4,6 +4,7 @@ import { useMemo, useState } from "react";
import { Paperclip } from "lucide-react";
import { SectionCollapsible } from "@/shared/ui";
import { useDownloadAttachmentByAtflCd } from "@/entities/attach";
import { useFacilityList } from "@/entities/bns-if";
import { useNowDmgMtncGnsvy } from "@/entities/dc";
@@ -12,7 +13,7 @@ import type {
SewerBscPlanResponseDto,
SewerBscPlanTmplntResponseDto,
} from "@/entities/sewer-bsc-plan";
import { fmtNumber, SectionCollapsible } from "@/widgets/pbadms-sprt";
import { fmtNumber } from "@/widgets/pbadms-sprt";
import {
Table,
TableBody,
@@ -6,7 +6,7 @@ import { useUserStore } from "@/shared/lib";
import { ElaprDocPrgrsStatus } from "@/entities/elapr";
import { useRvwMnpwMngLoginUserList } from "@/entities/rvw-mnpw";
import { useSewerBscPlanDetails } from "@/entities/sewer-bsc-plan";
import { SectionCollapsible, SupplementDemandSection } from "@/widgets/pbadms-sprt";
import { SupplementDemandSection } from "@/widgets/pbadms-sprt";
import { Skeleton } from "@common/components";
import { needsRoleUser01AtrzResolve } from "../lib/button-config";
@@ -95,9 +95,7 @@ function SewerBscPlanViewPage({ id, propChgCycl }: SewerBscPlanViewPageProps) {
<div className="mt-6 space-y-4">
<BasicInfoSection det={detDto} dtl={activeDtlDto} />
<ContactInfoSection dtl={activeDtlDto} />
<SectionCollapsible title="결재현황">
<ElaprDocPrgrsStatus elaprDocNo={detDto.sewerBscPlanDocNo} />
</SectionCollapsible>
<ElaprDocPrgrsStatus elaprDocNo={detDto.sewerBscPlanDocNo} />
<OutlineSection otlnList={otlnList} dtl={activeDtlDto} />
<BizCstMatrixSection bizCstList={bizCstList} dtl={activeDtlDto} />
<FnrsCstSection fnrsCstList={fnrsCstList} dtl={activeDtlDto} />
+1
View File
@@ -1,4 +1,5 @@
export { NoData } from "./no-data";
export { PageLayout } from "./page-layout";
export { SectionCollapsible } from "./section-collapsible";
export type { TextShimmerProps } from "./text-shimmer";
export { TEXT_SHIMMER_CLASS, TextShimmer } from "./text-shimmer";
@@ -1,37 +1,37 @@
"use client";
import type { ReactNode } from "react";
import { ChevronDown } from "lucide-react";
import { cn, Collapsible, CollapsibleContent, CollapsibleTrigger } from "@common/components";
interface SectionCollapsibleProps {
title: ReactNode;
defaultOpen?: boolean;
children: ReactNode;
}
function SectionCollapsible({ title, defaultOpen = true, children }: SectionCollapsibleProps) {
return (
<Collapsible defaultOpen={defaultOpen} className="mx-4 rounded-sm border bg-background">
<CollapsibleTrigger asChild>
<button
type="button"
className="group flex w-full cursor-pointer items-center justify-between border-b p-4 text-left data-[state=closed]:border-b-0"
>
<h2 className="text-2xl font-bold">{title}</h2>
<ChevronDown
className={cn(
"size-6 shrink-0 text-muted-foreground transition-transform",
"group-data-[state=open]:rotate-180",
)}
/>
</button>
</CollapsibleTrigger>
<CollapsibleContent className="p-2">{children}</CollapsibleContent>
</Collapsible>
);
}
export { SectionCollapsible };
"use client";
import type { ReactNode } from "react";
import { ChevronDown } from "lucide-react";
import { cn, Collapsible, CollapsibleContent, CollapsibleTrigger } from "@common/components";
interface SectionCollapsibleProps {
title: ReactNode;
defaultOpen?: boolean;
children: ReactNode;
}
function SectionCollapsible({ title, defaultOpen = true, children }: SectionCollapsibleProps) {
return (
<Collapsible defaultOpen={defaultOpen} className="mx-4 rounded-sm border bg-background">
<CollapsibleTrigger asChild>
<button
type="button"
className="group flex w-full cursor-pointer items-center justify-between border-b p-4 text-left data-[state=closed]:border-b-0"
>
<h2 className="text-2xl font-bold">{title}</h2>
<ChevronDown
className={cn(
"size-6 shrink-0 text-muted-foreground transition-transform",
"group-data-[state=open]:rotate-180",
)}
/>
</button>
</CollapsibleTrigger>
<CollapsibleContent className="p-2">{children}</CollapsibleContent>
</Collapsible>
);
}
export { SectionCollapsible };
@@ -12,12 +12,12 @@ import {
import { useDataTable } from "@/shared/lib";
import type { PageResponse } from "@/shared/model";
import { SectionCollapsible } from "@/shared/ui";
import { NoData } from "@/shared/ui/no-data";
import type { CmCdAdstDstrComboResponseDto } from "@/entities/adstdstr";
import { useFindGugunCombo, useFindSidoCombo } from "@/entities/adstdstr";
import type { BnsDetailResponseDto, BnsListResponseDto, BnsSearchDto } from "@/entities/bns-if";
import { buildBnsSearchDto, useBnsDetail, useBnsList } from "@/entities/bns-if";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import {
Button,
Dialog,
@@ -1,4 +1,5 @@
import React from "react";
import { formatFileSize } from "@/shared/lib/file-utils";
type EtcFile = {
-1
View File
@@ -39,7 +39,6 @@ export {
type PbadmsTaskApplySelection,
} from "./ui/pbadms-task-apply-dialog";
export { PrivacyConsentSection } from "./ui/privacy-consent-section";
export { SectionCollapsible } from "./ui/section-collapsible";
export {
SplmntDmndDialog,
type SplmntDmndDialogConfirmItem,
@@ -9,6 +9,7 @@ import { ENDPOINT } from "@/shared/config";
import { useTus } from "@/shared/lib";
import type { AtflMngClientResponseDto, EsntlAtchFileMngTreeResponseDto } from "@/shared/model";
import { TextShimmer } from "@/shared/ui";
import { SectionCollapsible } from "@/shared/ui";
import { attachService } from "@/entities/attach";
import { useEsntlAtchFileMngTree } from "@/entities/esntl";
import {
@@ -29,9 +30,7 @@ import {
type FieldPrefix,
isEtcFileKey,
toFileAccept,
} from "../lib/attachments-form-utils";
import { SectionCollapsible } from "./section-collapsible";
} from "../lib/attachments-form-utils";
interface AttachmentsFormData {
esntlAtchFileList: Array<{
@@ -3,6 +3,7 @@
import { useEffect, useMemo } from "react";
import { Controller, useFormContext, useWatch } from "react-hook-form";
import { SectionCollapsible } from "@/shared/ui";
import { Field } from "@/shared/ui/field";
import { useAcntgSeMngTree } from "@/entities/acntg";
import {
@@ -17,9 +18,7 @@ import {
} from "@common/components";
import { buildAcntgCostItems, recalculateBizCstTotals } from "../lib/business-cost-form-utils";
import { calcDiffPercent } from "../lib/format-utils";
import { SectionCollapsible } from "./section-collapsible";
import { calcDiffPercent } from "../lib/format-utils";
interface BusinessCostFormData {
bizCstList: Array<{
@@ -3,6 +3,7 @@
import { useEffect, useMemo } from "react";
import { Controller, useFormContext, useWatch } from "react-hook-form";
import { SectionCollapsible } from "@/shared/ui";
import { Field } from "@/shared/ui/field";
import { useCnstpSeMngTree } from "@/entities/cnstp";
import {
@@ -16,9 +17,7 @@ import {
TableRow,
} from "@common/components";
import { buildCnstpScaleItems, recalculateBzScaleTotals } from "../lib/business-scale-form-utils";
import { SectionCollapsible } from "./section-collapsible";
import { buildCnstpScaleItems, recalculateBzScaleTotals } from "../lib/business-scale-form-utils";
interface BusinessScaleFormData {
bzScaleList: Array<{
@@ -5,6 +5,7 @@ import { Controller, useFormContext, useWatch } from "react-hook-form";
import { useQuery } from "@tanstack/react-query";
import { SectionCollapsible } from "@/shared/ui";
import { Field, FieldLabel } from "@/shared/ui/field";
import { cklstMngService, type CklstTreeNode } from "@/entities/cklst";
import { useCodeList } from "@/entities/code";
@@ -29,9 +30,7 @@ import {
buildChecklistTabs,
normalizeTaskSeComCdArray,
syncCklstResultListFromTree,
} from "../lib/checklist-form-utils";
import { SectionCollapsible } from "./section-collapsible";
} from "../lib/checklist-form-utils";
type FieldPrefix = "fnrsCnsltnMng" | "instlSncnMng" | "designCnstnMng" | "sewerBscPlan";
@@ -3,8 +3,8 @@
import { Controller, useFormContext } from "react-hook-form";
import { useUserStore } from "@/shared/lib";
import { SectionCollapsible } from "@/shared/ui";
import { Field, FieldError } from "@/shared/ui/field";
import { SectionCollapsible } from "@/widgets/pbadms-sprt";
import { Input, Table, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
type FieldPrefix =
@@ -5,6 +5,7 @@ import { Controller, useFormContext, useWatch } from "react-hook-form";
import { getDefaultFileKey, useTus } from "@/shared/lib";
import { TextShimmer } from "@/shared/ui";
import { SectionCollapsible } from "@/shared/ui";
import { Field } from "@/shared/ui/field";
import { useAcntgSeMngTree } from "@/entities/acntg";
import type { AtflMngClientResponseDto } from "@/entities/fnrs-cnsltn";
@@ -34,7 +35,6 @@ import {
import { calcDiffPercent } from "../lib/format-utils";
import { BizCstTotalDisplayTable } from "./biz-cst-total-display-table";
import { SectionCollapsible } from "./section-collapsible";
const SHAR_FILE_KEY_PREFIX = "fnrs-shar::";
@@ -2,6 +2,7 @@
import { Controller, useFormContext } from "react-hook-form";
import { SectionCollapsible } from "@/shared/ui";
import { Field, FieldError, FieldLabel, FieldSet } from "@/shared/ui/field";
import {
RadioGroup,
@@ -11,9 +12,7 @@ import {
TableHead,
TableHeader,
TableRow,
} from "@common/components";
import { SectionCollapsible } from "./section-collapsible";
} from "@common/components";
interface PrivacyConsentFormData {
privacyConsent: "Y" | "N";
@@ -7,6 +7,7 @@ import { Paperclip } from "lucide-react";
import { dayjs, getDefaultFileKey, useTus } from "@/shared/lib";
import { TextShimmer } from "@/shared/ui";
import { SectionCollapsible } from "@/shared/ui";
import { attachService, useDownloadAttachmentByAtflCd } from "@/entities/attach";
import {
Badge,
@@ -20,8 +21,6 @@ import {
Textarea,
} from "@common/components";
import { SectionCollapsible } from "./section-collapsible";
const SPLMNT_CMPTN_FILE_KEY_PREFIX = "splmnt-cmptn::";
interface UploadedSplmntFile {
@@ -4,6 +4,7 @@ import { Paperclip } from "lucide-react";
import { dayjs } from "@/shared/lib";
import type { SplmntDmndResponseExtension, SplmntDmndSaveBase } from "@/shared/model";
import { SectionCollapsible } from "@/shared/ui";
import { useDownloadAttachmentByAtflCd } from "@/entities/attach";
import {
Badge,
@@ -15,8 +16,6 @@ import {
TableRow,
} from "@common/components";
import { SectionCollapsible } from "./section-collapsible";
type SplmntDmndItem = SplmntDmndSaveBase & SplmntDmndResponseExtension;
interface SupplementDemandSectionProps {