diff --git a/ServicesApi/Builds/Account/Dockerfile b/ServicesApi/Builds/Account/Dockerfile new file mode 100644 index 0000000..33af5f7 --- /dev/null +++ b/ServicesApi/Builds/Account/Dockerfile @@ -0,0 +1,30 @@ +FROM python:3.12-slim + +WORKDIR / + +# Install system dependencies and Poetry +RUN apt-get update && apt-get install -y --no-install-recommends gcc && rm -rf /var/lib/apt/lists/* && pip install --no-cache-dir poetry + +# Copy Poetry configuration +COPY /pyproject.toml ./pyproject.toml + +# Configure Poetry and install dependencies with optimizations +RUN poetry config virtualenvs.create false && poetry install --no-interaction --no-ansi --no-root --only main && pip cache purge && rm -rf ~/.cache/pypoetry + +# Copy application code +COPY /ServicesApi/Initializer /Initializer +COPY /ServicesApi/Controllers /Controllers +COPY /ServicesApi/Validations /Validations +COPY /ServicesApi/Schemas /Schemas +COPY /ServicesApi/Extensions /Extensions + +COPY /ServicesApi/Builds/Account/Endpoints /Initializer/Endpoints +COPY /ServicesApi/Builds/Account/Events /Initializer/Events +COPY /ServicesApi/Builds/Account/Validations /Initializer/Validations +COPY /ServicesApi/Builds/Account/Index.py /Initializer/index.py + +# Set Python path to include app directory +ENV PYTHONPATH=/ PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 + +# Run the application using the configured uvicorn server +CMD ["poetry", "run", "python", "/Initializer/app.py"] diff --git a/ServicesApi/Builds/Account/endpoints/account_records/router.py b/ServicesApi/Builds/Account/endpoints/account_records/router.py new file mode 100644 index 0000000..4a4a09f --- /dev/null +++ b/ServicesApi/Builds/Account/endpoints/account_records/router.py @@ -0,0 +1,72 @@ +from typing import Any +from fastapi import APIRouter, Depends + +from index import endpoints_index +from events.account_records.cluster import AccountRecordsRouterCluster + +from api_validations.defaults.validations import CommonHeaders +from api_validations.response.pagination import PaginateOnly +from api_middlewares.token_provider import TokenProvider + + +account_records_router = APIRouter(prefix="/account/records", tags=["Account Cluster"]) + + +account_records_list = "AccountRecordsList" +@account_records_router.post( + path="/list", + description="List all account records endpoint", + operation_id=endpoints_index[account_records_list], +) +def people_list_route(data: PaginateOnly, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)): + token_object = TokenProvider.get_dict_from_redis(token=headers.token) + event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object) + event_key = TokenProvider.retrieve_event_codes(**event_founder_dict) + FoundCluster = AccountRecordsRouterCluster.get_event_cluster(account_records_list) + event_cluster_matched = FoundCluster.match_event(event_key=event_key) + return event_cluster_matched.event_callable(list_options=data, header=headers) + + +account_records_create = "AccountRecordsCreate" +@account_records_router.post( + path="/create", + description="Create account records endpoint", + operation_id=endpoints_index[account_records_create], +) +def account_records_create_route(data, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)): + token_object = TokenProvider.get_dict_from_redis(token=headers.token) + event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object) + event_key = TokenProvider.retrieve_event_codes(**event_founder_dict) + FoundCluster = AccountRecordsRouterCluster.get_event_cluster(account_records_create) + event_cluster_matched = FoundCluster.match_event(event_key=event_key) + return event_cluster_matched.event_callable(data=data, header=headers) + + +account_records_update = "AccountRecordsUpdate" +@account_records_router.post( + path="/update/{uu_id}", + description="Update account records endpoint", + operation_id=endpoints_index[account_records_update], +) +def account_records_update_route(uu_id: str, data, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)): + token_object = TokenProvider.get_dict_from_redis(token=headers.token) + event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object) + event_key = TokenProvider.retrieve_event_codes(**event_founder_dict) + FoundCluster = AccountRecordsRouterCluster.get_event_cluster(account_records_update) + event_cluster_matched = FoundCluster.match_event(event_key=event_key) + return event_cluster_matched.event_callable(uu_id=uu_id, data=data, header=headers) + + +account_records_delete = "AccountRecordsDelete" +@account_records_router.post( + path="/delete/{uu_id}", + description="Delete account records endpoint", + operation_id=endpoints_index[account_records_delete], +) +def account_records_delete_route(uu_id: str, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)): + token_object = TokenProvider.get_dict_from_redis(token=headers.token) + event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object) + event_key = TokenProvider.retrieve_event_codes(**event_founder_dict) + FoundCluster = AccountRecordsRouterCluster.get_event_cluster(account_records_delete) + event_cluster_matched = FoundCluster.match_event(event_key=event_key) + return event_cluster_matched.event_callable(uu_id=uu_id, header=headers) diff --git a/ServicesApi/Builds/Account/endpoints/routes.py b/ServicesApi/Builds/Account/endpoints/routes.py new file mode 100644 index 0000000..982061e --- /dev/null +++ b/ServicesApi/Builds/Account/endpoints/routes.py @@ -0,0 +1,15 @@ +from fastapi import APIRouter +from .account_records.router import account_records_router + +def get_routes() -> list[APIRouter]: + return [account_records_router] + + +def get_safe_endpoint_urls() -> list[tuple[str, str]]: + return [ + ("/", "GET"), + ("/docs", "GET"), + ("/redoc", "GET"), + ("/openapi.json", "GET"), + ("/metrics", "GET"), + ] diff --git a/ServicesApi/Builds/Account/events/__init__.py b/ServicesApi/Builds/Account/events/__init__.py new file mode 100644 index 0000000..4341b95 --- /dev/null +++ b/ServicesApi/Builds/Account/events/__init__.py @@ -0,0 +1,5 @@ +from .account_records.cluster import AccountRecordsRouterCluster + +__all__ = [ + "AccountRecordsRouterCluster", +] diff --git a/ServicesApi/Builds/Account/events/a.txt b/ServicesApi/Builds/Account/events/a.txt new file mode 100644 index 0000000..e69de29 diff --git a/ServicesApi/Builds/Account/events/account_records/cluster.py b/ServicesApi/Builds/Account/events/account_records/cluster.py new file mode 100644 index 0000000..2c41b8b --- /dev/null +++ b/ServicesApi/Builds/Account/events/account_records/cluster.py @@ -0,0 +1,27 @@ +from api_initializer.event_clusters import EventCluster, RouterCluster +from index import endpoints_index +from .supers_events import ( + SuperAccountRecordsListEvent, + SuperAccountRecordsCreateEvent, + SuperAccountRecordsUpdateEvent, + SuperAccountRecordsDeleteEvent, +) + +AccountRecordsRouterCluster = RouterCluster(name="AccountRecordsRouterCluster") + +AccountRecordsListEventCluster = EventCluster(name="AccountRecordsListEventCluster", endpoint_uu_id=endpoints_index["AccountRecordsList"]) +AccountRecordsListEventCluster.add_event(SuperAccountRecordsListEvent) + +AccountRecordsCreateEventCluster = EventCluster(name="AccountRecordsCreateEventCluster", endpoint_uu_id=endpoints_index["AccountRecordsCreate"]) +AccountRecordsCreateEventCluster.add_event(SuperAccountRecordsCreateEvent) + +AccountRecordsUpdateEventCluster = EventCluster(name="AccountRecordsUpdateEventCluster", endpoint_uu_id=endpoints_index["AccountRecordsUpdate"]) +AccountRecordsUpdateEventCluster.add_event(SuperAccountRecordsUpdateEvent) + +AccountRecordsDeleteEventCluster = EventCluster(name="AccountRecordsDeleteEventCluster", endpoint_uu_id=endpoints_index["AccountRecordsDelete"]) +AccountRecordsDeleteEventCluster.add_event(SuperAccountRecordsDeleteEvent) + +AccountRecordsRouterCluster.set_event_cluster(AccountRecordsListEventCluster) +AccountRecordsRouterCluster.set_event_cluster(AccountRecordsCreateEventCluster) +AccountRecordsRouterCluster.set_event_cluster(AccountRecordsUpdateEventCluster) +AccountRecordsRouterCluster.set_event_cluster(AccountRecordsDeleteEventCluster) diff --git a/ServicesApi/Builds/Account/events/account_records/supers_events.py b/ServicesApi/Builds/Account/events/account_records/supers_events.py new file mode 100644 index 0000000..b7cae45 --- /dev/null +++ b/ServicesApi/Builds/Account/events/account_records/supers_events.py @@ -0,0 +1,93 @@ +from typing import Any + +from api_initializer.event_clusters import Event +from api_validations.response import ( + PaginateOnly, + Pagination, + PaginationResult, + PostgresResponseSingle, + PostgresResponse, + EndpointResponse +) +from api_validations.defaults.validations import CommonHeaders +from schemas import AccountRecords + +# List all account records endpoint Super Users +SuperAccountRecordsListEvent = Event( + name="super_account_records_list", + key="c5b6d9c7-9115-4825-bcc1-16f409a7004a", + request_validator=None, # TODO: Add request validator + response_validator=None, # TODO: Add response validator + description="Super Account Records List all flat representative users endpoint", +) + +# Create account records endpoint Super Users +SuperAccountRecordsCreateEvent = Event( + name="super_account_records_create", + key="1ab5c778-5a25-49d0-8bf8-799a74f430ad", + request_validator=None, # TODO: Add request validator + response_validator=None, # TODO: Add response validator + description="Super Account Records Create endpoint", +) + +# Update account records endpoint Super Users +SuperAccountRecordsUpdateEvent = Event( + name="super_account_records_update", + key="137fca9b-110a-4a28-bddd-36fde7380e89", + request_validator=None, # TODO: Add request validator + response_validator=None, # TODO: Add response validator + description="Super Account Records Update endpoint", +) + +# Delete account records endpoint Super Users +SuperAccountRecordsDeleteEvent = Event( + name="super_account_records_delete", + key="8bf399a7-f79e-49d2-b481-f5974676599f", + request_validator=None, # TODO: Add request validator + response_validator=None, # TODO: Add response validator + description="Super Account Records Delete endpoint", +) + + +def super_account_records_list_callable(list_options: PaginateOnly, header: CommonHeaders): + return { + "message": "MSG0003-LIST", + "data": None, + "completed": True, + } + + +SuperAccountRecordsListEvent.event_callable = super_account_records_list_callable + + +def super_account_records_create_callable(data: AccountRecords, header: CommonHeaders): + return { + "message": "MSG0003-CREATE", + "data": None, + "completed": True, + } + + +SuperAccountRecordsCreateEvent.event_callable = super_account_records_create_callable + + +def super_account_records_update_callable(data: AccountRecords, header: CommonHeaders): + return { + "message": "MSG0003-UPDATE", + "data": None, + "completed": True, + } + + +SuperAccountRecordsUpdateEvent.event_callable = super_account_records_update_callable + + +def super_account_records_delete_callable(data: AccountRecords, header: CommonHeaders): + return { + "message": "MSG0003-DELETE", + "data": None, + "completed": True, + } + + +SuperAccountRecordsDeleteEvent.event_callable = super_account_records_delete_callable diff --git a/ServicesApi/Builds/Account/index.py b/ServicesApi/Builds/Account/index.py new file mode 100644 index 0000000..68b59a0 --- /dev/null +++ b/ServicesApi/Builds/Account/index.py @@ -0,0 +1,8 @@ + + +endpoints_index: dict = { + "AccountRecordsList": "7552d270-0e2a-4a40-bfd5-ec3493bc63ab", + "AccountRecordsCreate": "ddb956fb-73ef-4eec-a51b-ff54c3d65552", + "AccountRecordsUpdate": "6f120aca-b5a7-43ea-8214-9c17f9333c8a", + "AccountRecordsDelete": "5cc1de2d-de11-4bbe-9c19-5b8eec69e4a1", +} diff --git a/ServicesWeb/customer/src/components/custom/menu/component.tsx b/ServicesWeb/customer/src/components/custom/menu/component.tsx index 03d11d0..3675570 100644 --- a/ServicesWeb/customer/src/components/custom/menu/component.tsx +++ b/ServicesWeb/customer/src/components/custom/menu/component.tsx @@ -18,9 +18,9 @@ const MenuComponent: FC = ({ selectionData, selectionLoading, selectionError, menuData, menuLoading, menuError }) => { - if (menuLoading) { return } // Render loading state - if (menuError) { return ; } // Render error state - if (availableApplications.length === 0) { return ; } // Render empty state + if (menuLoading) { return } + if (menuError) { return ; } + if (availableApplications.length === 0) { return ; } function handleClientSelection(client: any) { console.log('Client selected:', client) } const lang = onlineData?.lang as LanguageTypes || 'en'; return ( diff --git a/ServicesWeb/customer/src/components/custom/menu/menuItemsSection.tsx b/ServicesWeb/customer/src/components/custom/menu/menuItemsSection.tsx index 4d25a1c..b50bd5f 100644 --- a/ServicesWeb/customer/src/components/custom/menu/menuItemsSection.tsx +++ b/ServicesWeb/customer/src/components/custom/menu/menuItemsSection.tsx @@ -4,20 +4,14 @@ import { menuTranslation } from "@/languages/mutual/menu"; import FirstLayerDropdown from "./firstLayerComponent"; import SecondLayerDropdown from "./secondLayerComponent"; import ThirdLayerDropdown from "./thirdLayerComponent"; +import { + TranslationItem, + ThirdLayerItem, + SecondLayerItems, + MenuStructure, + MenuItemsSectionProps, +} from "./types"; -type TranslationItem = { value: string; key: string }; -type ThirdLayerItemData = { path: string; translation: TranslationItem[] }; -type ThirdLayerItem = Record; -type SecondLayerItems = Record; -type FirstLayerItems = Record; -type MenuStructure = FirstLayerItems; - -interface MenuItemsSectionProps { - availableApplications: string[]; - activePageUrl: string; - lang: string; - prefix?: string; -} const menuStaticTranslation = { tr: { menu: "Menü" }, @@ -28,40 +22,46 @@ const MenuItemsSection: FC = ({ availableApplications, ac const [expandedFirstLayer, setExpandedFirstLayer] = useState(null); const [expandedSecondLayer, setExpandedSecondLayer] = useState(null); const [menuStructure, setMenuStructure] = useState({}); - - const menuTranslationWLang = menuTranslation[lang as keyof typeof menuTranslation]; - const activeParsedLayer = (menuTranslationWLang[activePageUrl as keyof typeof menuTranslationWLang] as unknown as TranslationItem[]) || []; - const activeFirstLayer = activeParsedLayer[0] ? activeParsedLayer[0].key : null; - const activeSecondLayer = activeParsedLayer[1] ? activeParsedLayer[1].key : null; - const activeThirdLayer = activeParsedLayer[2] ? activeParsedLayer[2].key : null; + const [activeFirstLayer, setActiveFirstLayer] = useState(null); + const [activeSecondLayer, setActiveSecondLayer] = useState(null); + const [activeThirdLayer, setActiveThirdLayer] = useState(null); useEffect(() => { const newMenuStructure: MenuStructure = {}; + const menuTranslationWLang = menuTranslation[lang as keyof typeof menuTranslation]; + const activeParsedLayer = (menuTranslationWLang[activePageUrl as keyof typeof menuTranslationWLang] as unknown as TranslationItem[]) || []; availableApplications.forEach((appPath: string) => { const pathTranslation = menuTranslationWLang[appPath as keyof typeof menuTranslationWLang] as unknown as TranslationItem[] | undefined; if (pathTranslation && pathTranslation.length >= 3) { - const firstLayer = pathTranslation[0] ? pathTranslation[0].key : ''; - const secondLayer = pathTranslation[1] ? pathTranslation[1].key : ''; - const thirdLayer = pathTranslation[2] ? pathTranslation[2].key : ''; + const firstLayer = pathTranslation[0]?.key || ''; + const secondLayer = pathTranslation[1]?.key || ''; + const thirdLayer = pathTranslation[2]?.key || ''; if (!newMenuStructure[firstLayer]) { newMenuStructure[firstLayer] = {} } if (!newMenuStructure[firstLayer][secondLayer]) { newMenuStructure[firstLayer][secondLayer] = {} } newMenuStructure[firstLayer][secondLayer][thirdLayer] = { path: appPath, translation: pathTranslation }; } }); - setMenuStructure(newMenuStructure); - }, [availableApplications, menuTranslationWLang]); - useEffect(() => { if (activeFirstLayer) { setExpandedFirstLayer(activeFirstLayer); if (activeSecondLayer) { setExpandedSecondLayer(activeSecondLayer) } } }, [activeFirstLayer, activeSecondLayer]); + setMenuStructure(newMenuStructure); + setActiveFirstLayer(activeParsedLayer[0]?.key || null); + setActiveSecondLayer(activeParsedLayer[1]?.key || null); + setActiveThirdLayer(activeParsedLayer[2]?.key || null); + }, [availableApplications, lang, activePageUrl]); + + useEffect(() => { + if (activeFirstLayer) { setExpandedFirstLayer(activeFirstLayer); if (activeSecondLayer) { setExpandedSecondLayer(activeSecondLayer) } } + }, [activeFirstLayer, activeSecondLayer]); const handleFirstLayerClick = (key: string) => { if (expandedFirstLayer === key) { setExpandedFirstLayer(null); setExpandedSecondLayer(null) } else { setExpandedFirstLayer(key); setExpandedSecondLayer(null) } }; const handleSecondLayerClick = (key: string) => { if (expandedSecondLayer === key) { setExpandedSecondLayer(null) } else { setExpandedSecondLayer(key) } }; const renderThirdLayerItems = (firstLayerKey: string, secondLayerKey: string, thirdLayerItems: ThirdLayerItem) => { return Object.entries(thirdLayerItems).map(([thirdLayerKey, itemData]) => { const isActive = activeFirstLayer === firstLayerKey && activeSecondLayer === secondLayerKey && activeThirdLayer === thirdLayerKey; - const url = itemData ? itemData.path || '' : ''; - const translation = itemData ? itemData.translation || [] : []; + const url = itemData?.path || ''; + const translation = itemData?.translation || []; const displayText = translation[2]?.value || thirdLayerKey; - return
; + + return
; }); }; const renderSecondLayerItems = (firstLayerKey: string, secondLayerItems: SecondLayerItems) => { @@ -69,8 +69,9 @@ const MenuItemsSection: FC = ({ availableApplications, ac const isActive = activeFirstLayer === firstLayerKey && activeSecondLayer === secondLayerKey; const isExpanded = expandedSecondLayer === secondLayerKey; const anyThirdLayerItem = Object.values(thirdLayerItems)[0]; - const translation = anyThirdLayerItem ? anyThirdLayerItem.translation : []; + const translation = anyThirdLayerItem?.translation || []; const displayText = translation[1]?.value || secondLayerKey; + return (
handleSecondLayerClick(secondLayerKey)} /> @@ -79,14 +80,16 @@ const MenuItemsSection: FC = ({ availableApplications, ac ); }); }; + const renderFirstLayerItems = () => { return Object.entries(menuStructure).map(([firstLayerKey, secondLayerItems]) => { const isActive = activeFirstLayer === firstLayerKey; const isExpanded = expandedFirstLayer === firstLayerKey; - const anySecondLayer = Object.values(secondLayerItems)[0]; - const anyThirdLayerItem = anySecondLayer ? Object.values(anySecondLayer)[0] : null; - const translation = anyThirdLayerItem ? anyThirdLayerItem.translation : []; + const anySecondLayer = Object.values(secondLayerItems)[0] || {}; + const anyThirdLayerItem = Object.values(anySecondLayer)[0]; + const translation = anyThirdLayerItem?.translation || []; const displayText = translation[0]?.value || firstLayerKey; + return (
handleFirstLayerClick(firstLayerKey)} /> diff --git a/ServicesWeb/customer/src/components/custom/menu/type.ts b/ServicesWeb/customer/src/components/custom/menu/type.ts deleted file mode 100644 index 6f5c88c..0000000 --- a/ServicesWeb/customer/src/components/custom/menu/type.ts +++ /dev/null @@ -1,5 +0,0 @@ -interface IntrerfaceLayerDropdown { - isActive: boolean; - innerText: string; - onClick: () => void; -} diff --git a/ServicesWeb/customer/src/components/custom/menu/types.ts b/ServicesWeb/customer/src/components/custom/menu/types.ts new file mode 100644 index 0000000..9188b6d --- /dev/null +++ b/ServicesWeb/customer/src/components/custom/menu/types.ts @@ -0,0 +1,30 @@ +interface IntrerfaceLayerDropdown { + isActive: boolean; + innerText: string; + onClick: () => void; +} + +type TranslationItem = { value: string; key: string }; +type ThirdLayerItemData = { path: string; translation: TranslationItem[] }; +type ThirdLayerItem = Record; +type SecondLayerItems = Record; +type FirstLayerItems = Record; +type MenuStructure = FirstLayerItems; + +interface MenuItemsSectionProps { + availableApplications: string[]; + activePageUrl: string; + lang: string; + prefix?: string; +} + +export type { + IntrerfaceLayerDropdown, + TranslationItem, + ThirdLayerItemData, + ThirdLayerItem, + SecondLayerItems, + FirstLayerItems, + MenuStructure, + MenuItemsSectionProps, +}; diff --git a/ServicesWeb/customer/src/components/mutual/languageSelection/component.tsx b/ServicesWeb/customer/src/components/mutual/languageSelection/component.tsx index bf3b9cd..12a210d 100644 --- a/ServicesWeb/customer/src/components/mutual/languageSelection/component.tsx +++ b/ServicesWeb/customer/src/components/mutual/languageSelection/component.tsx @@ -1,4 +1,5 @@ 'use client'; +import { Globe } from "lucide-react"; import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent } from "@/components/mutual/ui/dropdown-menu"; import { Button } from "@/components/mutual/ui/button"; import { languageSelectionTranslation } from "@/languages/mutual/languageSelection"; @@ -27,7 +28,15 @@ const LanguageSelectionComponent: React.FC = ({
- + {languageButtons.map((props, index) => ( diff --git a/ServicesWeb/customer/src/languages/mutual/menu/turkish.ts b/ServicesWeb/customer/src/languages/mutual/menu/turkish.ts index 11c59d9..9a2d114 100644 --- a/ServicesWeb/customer/src/languages/mutual/menu/turkish.ts +++ b/ServicesWeb/customer/src/languages/mutual/menu/turkish.ts @@ -20,89 +20,89 @@ const menuTranslationTr = { // New menu "/dashboard": [ - { value: "Dashboard", key: "dashboard" }, - { value: "Dashboard", key: "dashboard" }, - { value: "Dashboard", key: "dashboard" }, + { value: "Panel", key: "dashboard" }, + { value: "Panel", key: "dashboard" }, + { value: "Panel", key: "dashboard" }, ], "/individual": [ - { value: "Individual", key: "individual" }, - { value: "Individual", key: "individual" }, - { value: "Individual", key: "individual" }, + { value: "Bireysel", key: "individual" }, + { value: "Bireysel", key: "individual" }, + { value: "Bireysel", key: "individual" }, ], "/user": [ - { value: "User", key: "user" }, - { value: "User", key: "user" }, - { value: "User", key: "user" }, + { value: "Kullanıcı", key: "user" }, + { value: "Kullanıcı", key: "user" }, + { value: "Kullanıcı", key: "user" }, ], "/build": [ - { value: "Build", key: "build" }, - { value: "Build", key: "build" }, - { value: "Build", key: "build" }, + { value: "Bina", key: "build" }, + { value: "Bina", key: "build" }, + { value: "Bina", key: "build" }, ], "/build/parts": [ - { value: "Build", key: "build" }, - { value: "Parts", key: "parts" }, - { value: "Build", key: "build" }, + { value: "Bina", key: "build" }, + { value: "Daireler", key: "parts" }, + { value: "Daireler", key: "build" }, ], "/management/budget/actions": [ - { value: "Management", key: "management" }, - { value: "Budget", key: "budget" }, - { value: "Actions", key: "actions" }, + { value: "Yönetim", key: "management" }, + { value: "Bütçe", key: "budget" }, + { value: "Eylemler", key: "actions" }, ], "/management/budget": [ - { value: "Management", key: "management" }, - { value: "Budget", key: "budget" }, - { value: "Budget", key: "budget" }, + { value: "Yönetim", key: "management" }, + { value: "Bütçe", key: "budget" }, + { value: "Bütçe", key: "budget" }, ], "/annual/meeting/close": [ - { value: "Annual", key: "annual" }, - { value: "Meeting", key: "meeting" }, - { value: "Close", key: "close" }, + { value: "Yıllık", key: "annual" }, + { value: "Toplantı", key: "meeting" }, + { value: "Kapat", key: "close" }, ], "/emergency/meeting": [ - { value: "Emergency", key: "emergency" }, - { value: "Meeting", key: "meeting" }, - { value: "Meeting", key: "meeting" }, + { value: "Acil", key: "emergency" }, + { value: "Toplantı", key: "meeting" }, + { value: "Toplantı", key: "meeting" }, ], "/emergency/meeting/close": [ - { value: "Emergency", key: "emergency" }, - { value: "Meeting", key: "meeting" }, - { value: "Close", key: "close" }, + { value: "Acil", key: "emergency" }, + { value: "Toplantı", key: "meeting" }, + { value: "Kapat", key: "close" }, ], "/tenant/accounting": [ - { value: "Tenant", key: "tenant" }, - { value: "Accounting", key: "accounting" }, - { value: "Accounting", key: "accounting" }, + { value: "Müşteri", key: "tenant" }, + { value: "Hesap", key: "accounting" }, + { value: "Hesap", key: "accounting" }, ], "/meeting/participation": [ - { value: "Meeting", key: "meeting" }, - { value: "Participation", key: "participation" }, - { value: "Participation", key: "participation" }, + { value: "Toplantı", key: "meeting" }, + { value: "Katılım", key: "participation" }, + { value: "Katılım", key: "participation" }, ], "/tenant/messageToBM": [ - { value: "Tenant", key: "tenant" }, - { value: "Message To BM", key: "messageToBM" }, - { value: "Message To BM", key: "messageToBM" }, + { value: "Müşteri", key: "tenant" }, + { value: "BM Mesajı", key: "messageToBM" }, + { value: "BM Mesajı", key: "messageToBM" }, ], "/tenant/messageToOwner": [ - { value: "Tenant", key: "tenant" }, - { value: "Message To Owner", key: "messageToOwner" }, - { value: "Message To Owner", key: "messageToOwner" }, + { value: "Müşteri", key: "tenant" }, + { value: "Müdür Mesajı", key: "messageToOwner" }, + { value: "Müdür Mesajı", key: "messageToOwner" }, ], "/management/accounting": [ - { value: "Management", key: "management" }, - { value: "Accounting", key: "accounting" }, - { value: "Accounting", key: "accounting" }, + { value: "Yönetim", key: "management" }, + { value: "Hesap", key: "accounting" }, + { value: "Hesap", key: "accounting" }, ], "/build/area": [ - { value: "Build", key: "build" }, - { value: "Area", key: "area" }, - { value: "Area", key: "area" }, + { value: "Bina", key: "build" }, + { value: "Alan", key: "area" }, + { value: "Alan", key: "area" }, ], "/management/budget/status": [ - { value: "Management", key: "management" }, - { value: "Budget", key: "budget" }, - { value: "Status", key: "status" }, + { value: "Yönetim", key: "management" }, + { value: "Bütçe", key: "budget" }, + { value: "Durum", key: "status" }, ], // Early menu diff --git a/ServicesWeb/customer/src/layouts/dashboard/client.tsx b/ServicesWeb/customer/src/layouts/dashboard/client.tsx index 344a4a7..e919db1 100644 --- a/ServicesWeb/customer/src/layouts/dashboard/client.tsx +++ b/ServicesWeb/customer/src/layouts/dashboard/client.tsx @@ -24,7 +24,6 @@ const ClientLayout: FC = ({ activePageUrl, searchParams }) => const { configData, isLoading: configLoading, error: configError, refreshConfig, updateConfig } = useConfig(); const prefix = "/panel" const mode = (searchParams?.mode as ModeTypes) || 'shortList'; - console.log("onlineData", onlineData) return ( diff --git a/ServicesWeb/customer/tsconfig.json b/ServicesWeb/customer/tsconfig.json index c133409..35a5838 100644 --- a/ServicesWeb/customer/tsconfig.json +++ b/ServicesWeb/customer/tsconfig.json @@ -22,6 +22,12 @@ "@/*": ["./src/*"] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + "src/components/custom/menu/types.ts" + ], "exclude": ["node_modules"] }