diff --git a/002_source/cms/src/app/dashboard/teachers/list/page.tsx.notworking b/002_source/cms/src/app/dashboard/teachers/list/page.tsx.notworking deleted file mode 100644 index 33d7590..0000000 --- a/002_source/cms/src/app/dashboard/teachers/list/page.tsx.notworking +++ /dev/null @@ -1,216 +0,0 @@ -// src/app/dashboard/teachers/list/page.tsx -'use client'; - -// RULES: -// contains list page for teachers (Teachers) -// -import * as React from 'react'; -import { useRouter } from 'next/navigation'; -import { COL_USER_METAS } from '@/constants'; -import { LoadingButton } from '@mui/lab'; -import Box from '@mui/material/Box'; -import Card from '@mui/material/Card'; -import Divider from '@mui/material/Divider'; -import Stack from '@mui/material/Stack'; -import Typography from '@mui/material/Typography'; -import { Plus as PlusIcon } from '@phosphor-icons/react/dist/ssr/Plus'; -import type { ListResult, RecordModel } from 'pocketbase'; - -import { TeachersFilters } from '@/components/dashboard/teacher/teachers-filters'; -import { TeachersPagination } from '@/components/dashboard/teacher/teachers-pagination'; -import { TeachersSelectionProvider } from '@/components/dashboard/teacher/teachers-selection-context'; -import { TeachersTable } from '@/components/dashboard/teacher/teachers-table'; -import type { Teacher } from '@/components/dashboard/teacher/type.d'; -import { useTranslation } from 'react-i18next'; - -import { paths } from '@/paths'; -import isDevelopment from '@/lib/check-is-development'; -import { logger } from '@/lib/default-logger'; -import { pb } from '@/lib/pb'; -import ErrorDisplay from '@/components/dashboard/error'; -import { defaultTeacher } from '@/components/dashboard/teacher/_constants'; -import FormLoading from '@/components/loading'; - -export default function Page({ searchParams }: PageProps): React.JSX.Element { - const { t } = useTranslation(['teachers']); - const router = useRouter(); - - const { email, phone, sortDir, status } = searchParams; - - const [teacherData, setTeacherData] = React.useState([]); - - const [isLoadingAddPage, setIsLoadingAddPage] = React.useState(false); - const [showLoading, setShowLoading] = React.useState(true); - const [showError, setShowError] = React.useState({ show: false, detail: '' }); - // - const [rowsPerPage, setRowsPerPage] = React.useState(5); - // - const [f, setF] = React.useState([]); - const [currentPage, setCurrentPage] = React.useState(0); - // - const [recordCount, setRecordCount] = React.useState(0); - const [listOption, setListOption] = React.useState({ filter: '' }); - const [listSort, setListSort] = React.useState({}); - - function isListOptionChanged() { - return JSON.stringify(listOption) === '{}'; - } - // - const reloadRows = async (): Promise => { - try { - const listOptionTeacherOnly = isListOptionChanged() - ? { filter: `role = "teacher"` } - : { filter: [listOption.filter, `role = "teacher"`].join(' && ') }; - - const models: ListResult = await pb - .collection(COL_USER_METAS) - .getList(currentPage + 1, rowsPerPage, listOptionTeacherOnly); - const { items, totalItems } = models; - const tempTeacher: Teacher[] = items.map((lt) => { - return { ...defaultTeacher, ...lt }; - }); - - setTeacherData(tempTeacher); - setRecordCount(totalItems); - setF(tempTeacher); - } catch (error) { - logger.error(error); - setShowError({ - // - show: true, - detail: JSON.stringify(error, null, 2), - }); - } finally { - setShowLoading(false); - } - }; - - const [lastListOption, setLastListOption] = React.useState({}); - const isFirstRun = React.useRef(false); - React.useEffect(() => { - if (!isFirstRun.current) { - isFirstRun.current = true; - } else if (JSON.stringify(listOption) !== JSON.stringify(lastListOption)) { - // reset page number as tab changes - setLastListOption(listOption); - setCurrentPage(0); - void reloadRows(); - } else { - void reloadRows(); - } - }, [currentPage, rowsPerPage, listOption]); - - React.useEffect(() => { - const tempFilter = []; - let tempSortDir = ''; - - if (status) { - tempFilter.push(`status = "${status}"`); - } - - if (sortDir) { - tempSortDir = `-created`; - } - - if (email) { - tempFilter.push(`email ~ "%${email}%"`); - } - - if (phone) { - tempFilter.push(`phone ~ "%${phone}%"`); - } - - let preFinalListOption = { filter: '' }; - if (tempFilter.length > 0) { - preFinalListOption = { filter: tempFilter.join(' && ') }; - } - if (tempSortDir.length > 0) { - preFinalListOption = { ...preFinalListOption, sort: tempSortDir }; - } - setListOption(preFinalListOption); - }, [sortDir, email, phone, status]); - - if (showLoading) return ; - - if (showError.show) - return ( - - ); - - return ( - - - - - {t('list.title')} - - - { - setIsLoadingAddPage(true); - router.push(paths.dashboard.teachers.create); - }} - startIcon={} - variant="contained" - > - {t('list.add')} - - - - - - - - - - - - - - - - -
{JSON.stringify(f, null, 2)}
-
-
- ); -} - -interface PageProps { - searchParams: { - email?: string; - phone?: string; - sortDir?: 'asc' | 'desc'; - status?: string; - // - }; -}