task-b complate

This commit is contained in:
phaichayon
2026-06-11 16:55:45 +07:00
parent 7a390cf0df
commit 67545d9295
135 changed files with 3295 additions and 6385 deletions

View File

@@ -0,0 +1 @@
export {};

View File

@@ -0,0 +1,14 @@
import { queryOptions } from '@tanstack/react-query';
import { getMasterOptions } from './service';
import type { MasterOptionsFilters } from './types';
export const masterOptionKeys = {
all: ['foundation', 'master-options'] as const,
list: (filters: MasterOptionsFilters) => [...masterOptionKeys.all, 'list', filters] as const
};
export const masterOptionsQueryOptions = (filters: MasterOptionsFilters) =>
queryOptions({
queryKey: masterOptionKeys.list(filters),
queryFn: () => getMasterOptions(filters)
});

View File

@@ -0,0 +1,18 @@
import { apiClient } from '@/lib/api-client';
import type { MasterOptionsFilters, MasterOptionsResponse } from './types';
export async function getMasterOptions(
filters: MasterOptionsFilters
): Promise<MasterOptionsResponse> {
const searchParams = new URLSearchParams();
if (filters.page) searchParams.set('page', String(filters.page));
if (filters.limit) searchParams.set('limit', String(filters.limit));
if (filters.search) searchParams.set('search', filters.search);
if (filters.category) searchParams.set('category', filters.category);
if (filters.sort) searchParams.set('sort', filters.sort);
const query = searchParams.toString();
return apiClient<MasterOptionsResponse>(`/foundation/master-options${query ? `?${query}` : ''}`);
}

View File

@@ -0,0 +1,32 @@
export interface MasterOptionItem {
id: string;
organization_id: string;
category: string;
code: string;
label: string;
value: string | null;
parent_id: string | null;
parent_label: string | null;
sort_order: number;
is_active: boolean;
deleted_at: string | null;
updated_at: string;
}
export interface MasterOptionsFilters {
page?: number;
limit?: number;
search?: string;
category?: string;
sort?: string;
}
export interface MasterOptionsResponse {
success: boolean;
time: string;
message: string;
total_items: number;
offset: number;
limit: number;
items: MasterOptionItem[];
}