diff --git a/apps/web/app/[locale]/timesheet/[memberId]/components/CalendarView.tsx b/apps/web/app/[locale]/timesheet/[memberId]/components/CalendarView.tsx
index 6d31d52e8..7518ef2c0 100644
--- a/apps/web/app/[locale]/timesheet/[memberId]/components/CalendarView.tsx
+++ b/apps/web/app/[locale]/timesheet/[memberId]/components/CalendarView.tsx
@@ -12,6 +12,7 @@ import MonthlyTimesheetCalendar from "./MonthlyTimesheetCalendar";
import { useTimelogFilterOptions } from "@/app/hooks";
import WeeklyTimesheetCalendar from "./WeeklyTimesheetCalendar";
import { IUser } from "@/app/interfaces";
+import TimesheetSkeleton from "@components/shared/skeleton/TimesheetSkeleton";
interface BaseCalendarDataViewProps {
t: TranslationHooks
data: GroupedTimesheet[];
@@ -32,31 +33,40 @@ export function CalendarView({ data, loading, user }: { data?: GroupedTimesheet[
t("common.DAYS.fri"),
t("common.DAYS.sat")
];
+
+ if (loading || !data) {
+ return (
+
+ {Array.from({ length: 10 }).map((_, index) => (
+
+ ))}
+
+ );
+ }
+
+ if (data.length === 0) {
+ return (
+
+
{t('pages.timesheet.NO_ENTRIES_FOUND')}
+
+ );
+ }
+
return (
-
- {data ? (
- data.length > 0 ? (
- <>
- {timesheetGroupByDays === 'Monthly' ? (
-
- ) : timesheetGroupByDays === 'Weekly' ? (
-
- ) : (
-
- )}
- >
- ) : (
-
-
{t('pages.timesheet.NO_ENTRIES_FOUND')}
-
- )
- ) : (
-
-
{t('pages.timesheet.LOADING')}
-
- )}
+
+ {(() => {
+ switch (timesheetGroupByDays) {
+ case 'Monthly':
+ return ;
+ case 'Weekly':
+ return ;
+ default:
+ return ;
+ }
+ })()}
);
+
}
const CalendarDataView = ({ data, t }: { data?: GroupedTimesheet[], t: TranslationHooks }) => {
diff --git a/apps/web/app/[locale]/timesheet/[memberId]/components/SelectionBar.tsx b/apps/web/app/[locale]/timesheet/[memberId]/components/SelectionBar.tsx
new file mode 100644
index 000000000..5cdf3bfa1
--- /dev/null
+++ b/apps/web/app/[locale]/timesheet/[memberId]/components/SelectionBar.tsx
@@ -0,0 +1,72 @@
+import { cn } from "@/lib/utils";
+import { useTranslations } from "next-intl";
+
+type ActionButtonProps = {
+ label: string;
+ onClick?: (event: React.MouseEvent
) => void;
+};
+
+const ActionButton = ({ label, onClick }: ActionButtonProps) => (
+
+);
+
+interface SelectionBarProps {
+ fullWidth: boolean;
+ selectedCount: number;
+ onApprove: () => void;
+ onReject: () => void;
+ onDelete: () => void;
+ onClearSelection: () => void;
+}
+
+export const SelectionBar = ({
+ fullWidth,
+ selectedCount,
+ onApprove,
+ onReject,
+ onDelete,
+ onClearSelection
+}: SelectionBarProps) => {
+ const t = useTranslations()
+ return (
+
+
+
+
+ {selectedCount}
+
+
selected
+
+
+
+
+
+
+
+ )
+}
diff --git a/apps/web/app/[locale]/timesheet/[memberId]/components/TimesheetCard.tsx b/apps/web/app/[locale]/timesheet/[memberId]/components/TimesheetCard.tsx
index 3510b831b..1b884c7c4 100644
--- a/apps/web/app/[locale]/timesheet/[memberId]/components/TimesheetCard.tsx
+++ b/apps/web/app/[locale]/timesheet/[memberId]/components/TimesheetCard.tsx
@@ -151,7 +151,7 @@ export const TimesheetCardDetail = ({ data }: { data?: Record
}
>
-
+
- {/* */}
{timesheetNavigator === 'ListView' ? (
)}
+