updated living space added
This commit is contained in:
@@ -9,35 +9,20 @@ import { DateTimePicker } from "@/components/ui/date-time-picker"
|
||||
import { BuildIbansAdd, buildIbansAddSchema } from "./schema"
|
||||
import { useAddBuildIbansMutation } from "./queries"
|
||||
|
||||
const BuildIbansForm = ({ refetchTable }: { refetchTable: () => void }) => {
|
||||
const BuildIbansForm = ({ refetchTable, buildId }: { refetchTable: () => void, buildId: string }) => {
|
||||
|
||||
const form = useForm<BuildIbansAdd>({
|
||||
resolver: zodResolver(buildIbansAddSchema),
|
||||
defaultValues: {
|
||||
iban: "",
|
||||
startDate: "",
|
||||
stopDate: "",
|
||||
bankCode: "",
|
||||
xcomment: "",
|
||||
expiryStarts: "",
|
||||
expiryEnds: "",
|
||||
},
|
||||
resolver: zodResolver(buildIbansAddSchema), defaultValues: { iban: "", startDate: "", stopDate: "", bankCode: "", xcomment: "", expiryStarts: "", expiryEnds: "" },
|
||||
});
|
||||
|
||||
const { handleSubmit } = form;
|
||||
|
||||
const mutation = useAddBuildIbansMutation();
|
||||
|
||||
function onSubmit(values: BuildIbansAdd) { mutation.mutate({ data: values }); setTimeout(() => refetchTable(), 400) };
|
||||
function onSubmit(values: BuildIbansAdd) { mutation.mutate({ data: values, buildId, refetchTable }) };
|
||||
|
||||
return (
|
||||
<Form {...form}>
|
||||
<form
|
||||
onSubmit={handleSubmit(onSubmit)}
|
||||
className="space-y-6 p-4"
|
||||
>
|
||||
{/* ROW 1 */}
|
||||
<form onSubmit={handleSubmit(onSubmit)} className="space-y-6 p-4" >
|
||||
|
||||
{/* ROW 1 */}
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<FormField
|
||||
control={form.control}
|
||||
|
||||
@@ -3,6 +3,8 @@ import { useState } from 'react';
|
||||
import { BuildIbansDataTableAdd } from './table/data-table';
|
||||
import { BuildIbansForm } from './form';
|
||||
import { useGraphQlBuildIbansList } from '../queries';
|
||||
import { useSearchParams, useRouter } from 'next/navigation';
|
||||
import { Button } from '@/components/ui/button';
|
||||
|
||||
const PageAddBuildIbans = () => {
|
||||
const [page, setPage] = useState(1);
|
||||
@@ -10,14 +12,19 @@ const PageAddBuildIbans = () => {
|
||||
const [sort, setSort] = useState({ createdAt: 'desc' });
|
||||
const [filters, setFilters] = useState({});
|
||||
|
||||
const { data, isLoading, error, refetch } = useGraphQlBuildIbansList({ limit, skip: (page - 1) * limit, sort, filters });
|
||||
|
||||
const searchParams = useSearchParams();
|
||||
const router = useRouter();
|
||||
const buildId = searchParams?.get('build');
|
||||
const { data, isLoading, error, refetch } = useGraphQlBuildIbansList({ limit, skip: (page - 1) * limit, sort, filters: { ...filters, buildId } });
|
||||
const noUUIDFound = <>
|
||||
<div>Back To Build IBANs. No uuid is found on headers</div>
|
||||
<Button onClick={() => router.push(`/build-ibans?build=${buildId}`)}>Back to Build IBANs</Button>
|
||||
</>
|
||||
if (!buildId) { return noUUIDFound }
|
||||
return (
|
||||
<>
|
||||
<BuildIbansDataTableAdd
|
||||
data={data?.data || []} totalCount={data?.totalCount || 0} currentPage={page} pageSize={limit} onPageChange={setPage} onPageSizeChange={setLimit} refetchTable={refetch}
|
||||
/>
|
||||
<BuildIbansForm refetchTable={refetch} />
|
||||
<BuildIbansDataTableAdd data={data?.data || []} totalCount={data?.totalCount || 0} currentPage={page} pageSize={limit} onPageChange={setPage} onPageSizeChange={setLimit} refetchTable={refetch} buildId={buildId} />
|
||||
<BuildIbansForm refetchTable={refetch} buildId={buildId} />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import { useMutation } from '@tanstack/react-query'
|
||||
import { toISOIfNotZ } from '@/lib/utils';
|
||||
import { BuildIbansAdd } from './schema';
|
||||
|
||||
const fetchGraphQlBuildIbansAdd = async (record: BuildIbansAdd): Promise<{ data: BuildIbansAdd | null; status: number }> => {
|
||||
const fetchGraphQlBuildIbansAdd = async (record: BuildIbansAdd, buildId: string, refetchTable: () => void): Promise<{ data: BuildIbansAdd | null; status: number }> => {
|
||||
console.log('Fetching test data from local API');
|
||||
record.expiryStarts = record.expiryStarts ? toISOIfNotZ(record.expiryStarts) : undefined;
|
||||
record.expiryEnds = record.expiryEnds ? toISOIfNotZ(record.expiryEnds) : undefined;
|
||||
@@ -11,16 +11,16 @@ const fetchGraphQlBuildIbansAdd = async (record: BuildIbansAdd): Promise<{ data:
|
||||
record.stopDate = toISOIfNotZ(record.stopDate);
|
||||
console.dir({ record })
|
||||
try {
|
||||
const res = await fetch('/api/build-ibans/add', { method: 'POST', cache: 'no-store', credentials: "include", body: JSON.stringify(record) });
|
||||
const res = await fetch(`/api/build-ibans/add?build=${buildId}`, { method: 'POST', cache: 'no-store', credentials: "include", body: JSON.stringify(record) });
|
||||
if (!res.ok) { const errorText = await res.text(); console.error('Test data API error:', errorText); throw new Error(`API error: ${res.status} ${res.statusText}`) }
|
||||
const data = await res.json();
|
||||
const data = await res.json(); refetchTable();
|
||||
return { data: data.data, status: res.status }
|
||||
} catch (error) { console.error('Error fetching test data:', error); throw error }
|
||||
};
|
||||
|
||||
export function useAddBuildIbansMutation() {
|
||||
return useMutation({
|
||||
mutationFn: ({ data }: { data: BuildIbansAdd }) => fetchGraphQlBuildIbansAdd(data),
|
||||
mutationFn: ({ data, buildId, refetchTable }: { data: BuildIbansAdd, buildId: string, refetchTable: () => void }) => fetchGraphQlBuildIbansAdd(data, buildId, refetchTable),
|
||||
onSuccess: () => { console.log("Build IBANs created successfully") },
|
||||
onError: (error) => { console.error("Add build IBANs failed:", error) },
|
||||
})
|
||||
|
||||
@@ -55,6 +55,7 @@ export function BuildIbansDataTableAdd({
|
||||
onPageChange,
|
||||
onPageSizeChange,
|
||||
refetchTable,
|
||||
buildId
|
||||
}: {
|
||||
data: schemaType[],
|
||||
totalCount: number,
|
||||
@@ -62,7 +63,8 @@ export function BuildIbansDataTableAdd({
|
||||
pageSize: number,
|
||||
onPageChange: (page: number) => void,
|
||||
onPageSizeChange: (size: number) => void,
|
||||
refetchTable: () => void
|
||||
refetchTable: () => void,
|
||||
buildId: string
|
||||
}) {
|
||||
|
||||
const router = useRouter();
|
||||
@@ -142,9 +144,8 @@ export function BuildIbansDataTableAdd({
|
||||
})}
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
<Button variant="outline" size="sm" onClick={() => { router.push("/build-ibans") }}>
|
||||
<Home />
|
||||
<span className="hidden lg:inline">Back to Build IBANs</span>
|
||||
<Button variant="outline" size="sm" onClick={() => { router.push(`/build-ibans?build=${buildId}`) }}>
|
||||
<Home /><span className="hidden lg:inline">Back to Build IBANs</span>
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -78,7 +78,8 @@ export function BuildIbansDataTable({
|
||||
pageSize = 10,
|
||||
onPageChange,
|
||||
onPageSizeChange,
|
||||
refetchTable
|
||||
refetchTable,
|
||||
buildId
|
||||
}: {
|
||||
data: schemaType[],
|
||||
totalCount: number,
|
||||
@@ -87,6 +88,7 @@ export function BuildIbansDataTable({
|
||||
onPageChange: (page: number) => void,
|
||||
onPageSizeChange: (size: number) => void,
|
||||
refetchTable: () => void,
|
||||
buildId: string
|
||||
}) {
|
||||
|
||||
const router = useRouter();
|
||||
@@ -163,7 +165,7 @@ export function BuildIbansDataTable({
|
||||
})}
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
<Button variant="outline" size="sm" onClick={() => { router.push("/build-ibans/add") }}>
|
||||
<Button variant="outline" size="sm" onClick={() => { router.push(`/build-ibans/add?build=${buildId}`) }}>
|
||||
<IconPlus />
|
||||
<span className="hidden lg:inline">Add Build Iban</span>
|
||||
</Button>
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
import { BuildIbansDataTable } from './list/data-table';
|
||||
import { useState } from 'react';
|
||||
import { useGraphQlBuildIbansList } from './queries';
|
||||
import { useSearchParams, useRouter } from 'next/navigation';
|
||||
import { Button } from '@/components/ui/button';
|
||||
|
||||
const PageBuildIbans = () => {
|
||||
|
||||
@@ -10,7 +12,11 @@ const PageBuildIbans = () => {
|
||||
const [sort, setSort] = useState({ createdAt: 'desc' });
|
||||
const [filters, setFilters] = useState({});
|
||||
|
||||
const { data, isLoading, error, refetch } = useGraphQlBuildIbansList({ limit, skip: (page - 1) * limit, sort, filters });
|
||||
const searchParams = useSearchParams();
|
||||
const router = useRouter();
|
||||
const buildId = searchParams?.get('build');
|
||||
|
||||
const { data, isLoading, error, refetch } = useGraphQlBuildIbansList({ limit, skip: (page - 1) * limit, sort, filters: { ...filters, buildId } });
|
||||
|
||||
const handlePageChange = (newPage: number) => { setPage(newPage) };
|
||||
const handlePageSizeChange = (newSize: number) => { setLimit(newSize); setPage(1) };
|
||||
@@ -18,7 +24,12 @@ const PageBuildIbans = () => {
|
||||
if (isLoading) { return <div className="flex items-center justify-center p-8">Loading...</div> }
|
||||
if (error) { return <div className="flex items-center justify-center p-8 text-red-500">Error loading build areas</div> }
|
||||
|
||||
return <BuildIbansDataTable data={data?.data || []} totalCount={data?.totalCount || 0} currentPage={page} pageSize={limit} onPageChange={handlePageChange} onPageSizeChange={handlePageSizeChange} refetchTable={refetch} />;
|
||||
const noUUIDFound = <>
|
||||
<div>Back To Builds. No uuid is found on headers</div>
|
||||
<Button onClick={() => router.push('/builds')}>Back to Builds</Button>
|
||||
</>
|
||||
if (!buildId) { return noUUIDFound }
|
||||
return <BuildIbansDataTable data={data?.data || []} totalCount={data?.totalCount || 0} currentPage={page} pageSize={limit} onPageChange={handlePageChange} onPageSizeChange={handlePageSizeChange} refetchTable={refetch} buildId={buildId} />;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -12,12 +12,9 @@ import { BuildIbansUpdate, buildIbansUpdateSchema } from "@/pages/build-ibans/up
|
||||
const BuildIbansForm = ({ refetchTable, initData, selectedUuid }: { refetchTable: () => void, initData: BuildIbansUpdate, selectedUuid: string }) => {
|
||||
|
||||
const form = useForm<BuildIbansUpdate>({ resolver: zodResolver(buildIbansUpdateSchema), defaultValues: { ...initData } })
|
||||
|
||||
const { handleSubmit } = form
|
||||
|
||||
const mutation = useUpdateBuildIbansMutation();
|
||||
|
||||
function onSubmit(values: BuildIbansUpdate) { mutation.mutate({ data: values as any || initData, uuid: selectedUuid }); setTimeout(() => refetchTable(), 400) }
|
||||
function onSubmit(values: BuildIbansUpdate) { mutation.mutate({ data: values as any || initData, uuid: selectedUuid, refetchTable }) }
|
||||
|
||||
return (
|
||||
<Form {...form}>
|
||||
|
||||
@@ -24,10 +24,7 @@ const PageUpdateBuildIbans = () => {
|
||||
if (!initData) { return backToBuildAddress }
|
||||
return (
|
||||
<>
|
||||
<BuildIbansDataTableUpdate
|
||||
data={data?.data || []} totalCount={data?.totalCount || 0} currentPage={page} pageSize={limit}
|
||||
onPageChange={setPage} onPageSizeChange={setLimit} refetchTable={refetch}
|
||||
/>
|
||||
<BuildIbansDataTableUpdate data={data?.data || []} totalCount={data?.totalCount || 0} currentPage={page} pageSize={limit} onPageChange={setPage} onPageSizeChange={setLimit} refetchTable={refetch} />
|
||||
<BuildIbansForm refetchTable={refetch} initData={initData} selectedUuid={uuid} />
|
||||
</>
|
||||
)
|
||||
|
||||
@@ -3,23 +3,22 @@ import { useMutation } from '@tanstack/react-query'
|
||||
import { UpdateBuildIbansUpdate } from './types';
|
||||
import { toISOIfNotZ } from '@/lib/utils';
|
||||
|
||||
const fetchGraphQlBuildIbansUpdate = async (record: UpdateBuildIbansUpdate, uuid: string): Promise<{ data: UpdateBuildIbansUpdate | null; status: number }> => {
|
||||
const fetchGraphQlBuildIbansUpdate = async (record: UpdateBuildIbansUpdate, uuid: string, refetchTable: () => void): Promise<{ data: UpdateBuildIbansUpdate | null; status: number }> => {
|
||||
console.log('Fetching test data from local API');
|
||||
record.expiryStarts = record.expiryStarts ? toISOIfNotZ(record.expiryStarts) : undefined;
|
||||
record.expiryEnds = record.expiryEnds ? toISOIfNotZ(record.expiryEnds) : undefined;
|
||||
record.startDate = toISOIfNotZ(record.startDate);
|
||||
record.stopDate = toISOIfNotZ(record.stopDate);
|
||||
record.startDate = toISOIfNotZ(record.startDate); record.stopDate = toISOIfNotZ(record.stopDate);
|
||||
try {
|
||||
const res = await fetch(`/api/build-ibans/update?uuid=${uuid || ''}`, { method: 'POST', cache: 'no-store', credentials: "include", body: JSON.stringify(record) });
|
||||
if (!res.ok) { const errorText = await res.text(); console.error('Test data API error:', errorText); throw new Error(`API error: ${res.status} ${res.statusText}`) }
|
||||
const data = await res.json();
|
||||
const data = await res.json(); refetchTable();
|
||||
return { data: data.data, status: res.status }
|
||||
} catch (error) { console.error('Error fetching test data:', error); throw error }
|
||||
};
|
||||
|
||||
export function useUpdateBuildIbansMutation() {
|
||||
return useMutation({
|
||||
mutationFn: ({ data, uuid }: { data: UpdateBuildIbansUpdate, uuid: string }) => fetchGraphQlBuildIbansUpdate(data, uuid),
|
||||
mutationFn: ({ data, uuid, refetchTable }: { data: UpdateBuildIbansUpdate, uuid: string, refetchTable: () => void }) => fetchGraphQlBuildIbansUpdate(data, uuid, refetchTable),
|
||||
onSuccess: () => { console.log("Build IBANs updated successfully") },
|
||||
onError: (error) => { console.error("Update Build IBANs failed:", error) },
|
||||
})
|
||||
|
||||
@@ -87,7 +87,7 @@ export function BuildIbansDataTableUpdate({
|
||||
pageSize: number,
|
||||
onPageChange: (page: number) => void,
|
||||
onPageSizeChange: (size: number) => void,
|
||||
refetchTable: () => void
|
||||
refetchTable: () => void,
|
||||
}) {
|
||||
|
||||
const router = useRouter();
|
||||
@@ -100,7 +100,7 @@ export function BuildIbansDataTableUpdate({
|
||||
const dataIds = React.useMemo<UniqueIdentifier[]>(() => data?.map(({ _id }) => _id) || [], [data])
|
||||
|
||||
const deleteMutation = useDeletePersonMutation()
|
||||
const deleteHandler = (id: string) => { deleteMutation.mutate({ uuid: id }); setTimeout(() => { refetchTable() }, 200) }
|
||||
const deleteHandler = (id: string) => { deleteMutation.mutate({ uuid: id, refetchTable }) }
|
||||
const columns = getColumns(router, deleteHandler);
|
||||
const pagination = React.useMemo(() => ({ pageIndex: currentPage - 1, pageSize: pageSize, }), [currentPage, pageSize])
|
||||
const totalPages = Math.ceil(totalCount / pageSize)
|
||||
@@ -167,7 +167,7 @@ export function BuildIbansDataTableUpdate({
|
||||
})}
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
<Button variant="outline" size="sm" onClick={() => { router.push("/build-ibans") }}>
|
||||
<Button variant="outline" size="sm" onClick={() => { router.push(`/build-ibans`) }}>
|
||||
<Home />
|
||||
<span className="hidden lg:inline">Back to Build IBANs</span>
|
||||
</Button>
|
||||
|
||||
Reference in New Issue
Block a user