chore: update dependencies in package.json

- Bumped versions for several packages including:
  - @emotion/styled from ^11.14.0 to ^11.14.1
  - @maptiler/sdk from ^2.4.0 to ^2.5.1
  - @mui/icons-material from ^7.1.0 to ^7.3.6
  - @mui/material from ^7.1.0 to ^7.3.6
  - @mui/styled-engine-sc from ^6.0.0-alpha.18 to ^6.4.9
  - @mui/x-charts from ^7.16.0 to ^7.29.1
  - @mui/x-date-pickers from ^7.17.0 to ^7.29.4
  - @next/third-parties from ^15.1.0 to ^15.5.7
  - axios from ^1.7.7 to ^1.13.2
  - dayjs from ^1.11.13 to ^1.11.19
  - jspdf from ^3.0.1 to ^3.0.4
  - next from ^14.2.20 to ^15.5.7
  - next-themes from ^0.3.0 to ^0.4.6
  - npm from ^10.8.2 to ^10.9.4
  - react from ^18.0.0 to ^18.3.1
  - react-dom from ^18 to ^18.3.1
  - react-easy-crop from ^5.1.0 to ^5.5.6
  - react-toastify from ^10.0.6 to ^11.0.5
  - sharp from ^0.34.1 to ^0.34.5
  - styled-components from ^6.1.11 to ^6.1.19
  - stylis from ^4.3.4 to ^4.3.6
  - swiper from ^11.1.9 to ^11.2.10
  - postcss from ^8 to ^8.5.6
  - prettier from ^3.5.3 to ^3.7.4
  - tailwindcss from ^3.4.1 to ^3.4.18
This commit is contained in:
hamed
2025-12-04 05:26:37 +03:30
parent 3ca69dcd0f
commit 40df2db108
19 changed files with 816 additions and 1420 deletions
+6 -5
View File
@@ -5,15 +5,16 @@ import { getStateInfo } from "@/lib/getStateInfo";
import { buildClinicParams } from "@/helper";
export default async function Clinics({ searchParams }) {
const { matchedCity, matchedState } = getStateInfo();
const awaitedSearchParams = await searchParams;
const { matchedCity, matchedState } = await getStateInfo();
const API_URL = process.env.NEXT_PUBLIC_API_URL;
const stateParams = searchParams.state;
const cityParams = searchParams.city;
const stateParams = awaitedSearchParams.state;
const cityParams = awaitedSearchParams.city;
let clinics;
try {
// Params
let newSearchParams = searchParams;
let newSearchParams = awaitedSearchParams;
// Conditional State
if (stateParams) newSearchParams.state = stateParams;
@@ -30,7 +31,7 @@ export default async function Clinics({ searchParams }) {
clinics = await fetchReq(`${API_URL}/api/v1/clinics`, {
params,
});
} catch (err) {}
} catch (err) { }
return (
<Layout name="/clinics">
+5 -6
View File
@@ -31,7 +31,7 @@ function ItemDoctor({ doctor, loading, setDoctors }) {
width={72}
height={72}
alt="image-doctor"
src={doctor?.img && doctor?.img[0]?.url}
src={doctor?.img?.[0]?.url || "/assets/images/user.png"}
className="object-contain rounded-full w-[64px] md:w-[68px] lg:w-[72px] h-[64px] md:h-[68px] lg:h-[72px]"
/>
</CircularLoading>
@@ -83,11 +83,10 @@ function ItemDoctor({ doctor, loading, setDoctors }) {
<CustomLoading loading={loading} width={150} height={20}>
<p
className={`text-[12px] font-medium rounded w-fit p-1.5 ml-[52px]
${
Number(doctor?.active)
? "bg-[rgba(5,_186,_88,_0.04)] text-[#05BA58]"
: "bg-[rgba(211,_47,_47,_0.04)] text-[#D32F2F]"
}`}
${Number(doctor?.active)
? "bg-[rgba(5,_186,_88,_0.04)] text-[#05BA58]"
: "bg-[rgba(211,_47,_47,_0.04)] text-[#D32F2F]"
}`}
>
{doctor?.free_turn}
</p>
+4 -3
View File
@@ -7,11 +7,12 @@ import { cookies } from "next/headers";
import { redirect } from "next/navigation";
export default async function Dashboard({ searchParams }) {
const { matchedCity } = getStateInfo();
const awaitedSearchParams = await searchParams;
const { matchedCity } = await getStateInfo();
const user = await getUser();
const ability = defineAbilitiesFor(user);
const cookieStore = cookies();
const cookieStore = await cookies();
const token = cookieStore.get("access_token");
if (!ability.can("access", "Dashboard")) {
@@ -22,7 +23,7 @@ export default async function Dashboard({ searchParams }) {
return (
<Content
logged={token.value}
params={searchParams}
params={awaitedSearchParams}
matchedCity={matchedCity}
/>
);
+5 -4
View File
@@ -5,15 +5,16 @@ import { getStateInfo } from "@/lib/getStateInfo";
import axios from "axios";
async function Doctors({ searchParams }) {
const { matchedCity, matchedState } = getStateInfo();
const awaitedSearchParams = await searchParams;
const { matchedCity, matchedState } = await getStateInfo();
const API_URL = process.env.NEXT_PUBLIC_API_URL;
let doctors = null;
const stateParams = searchParams.state;
const cityParams = searchParams.city;
const stateParams = awaitedSearchParams.state;
const cityParams = awaitedSearchParams.city;
try {
let newSearchParams = searchParams;
let newSearchParams = awaitedSearchParams;
// Conditional State
if (stateParams) newSearchParams.state = stateParams;
+2 -2
View File
@@ -11,9 +11,9 @@ import { getStateInfo } from "@/lib/getStateInfo";
import { getCanonicalUrl } from "@/lib/getCanonicalUrl";
export async function generateMetadata() {
const { matchedCity } = getStateInfo();
const { matchedCity } = await getStateInfo();
const canonicalUrl = getCanonicalUrl();
const canonicalUrl = await getCanonicalUrl();
const baseMetadata = {
title: matchedCity ? matchedCity.title : "نوبت724",
+1 -1
View File
@@ -17,7 +17,7 @@ async function LayoutPanel({ children }) {
const API_URL = process.env.NEXT_PUBLIC_API_URL;
try {
const cookieStore = cookies();
const cookieStore = await cookies();
const userInfo = cookieStore.get("userInfo");
const accessToken = cookieStore.get("access_token");
@@ -56,9 +56,8 @@ function ListBime({ data }) {
<ul
ref={list}
className={`flex mt-[8px] items-center justify-start xl:justify-center gap-[8px] sm:gap-[13px] md:gap-[19px] lg:gap-[24px] ${
showArrows ? "overflow-x-auto hidden-scroll" : "overflow-visible"
}`}
className={`flex mt-[8px] items-center justify-start xl:justify-center gap-[8px] sm:gap-[13px] md:gap-[19px] lg:gap-[24px] ${showArrows ? "overflow-x-auto hidden-scroll" : "overflow-visible"
}`}
>
{data?.list_bime?.map((item, idx) => (
<CustomLoading key={idx} width={itemWidth} height={110}>
@@ -67,7 +66,7 @@ function ListBime({ data }) {
style={{ minWidth: itemWidth }}
>
<Image
src={item.logo?.[0]?.url || ""}
src={item.logo?.[0]?.url || "/assets/images/logo.png"}
height={92}
width={92}
alt="bime"
@@ -21,7 +21,7 @@ function Images({ data }) {
<CustomLoading width={600} height={400}>
<Image
className="rounded-[8px] overflow-hidden w-full h-full object-cover"
src={images_clinic[0].url || ""}
src={images_clinic[0]?.url || "/assets/images/clinic-img.png"}
alt="img clinic"
height={432}
width={600}
@@ -8,7 +8,7 @@ function Img({ url }) {
<CustomLoading loading={true} width="full" height={190}>
<Image
className="rounded-[8px] overflow-hidden"
src={url || ""}
src={url || "/assets/images/clinic-img.png"}
alt="img clinic"
height={204}
width={288}
@@ -8,16 +8,15 @@ function List({ data }) {
return (
<div
className={`hidden w-full md:grid gap-[16px] lg:gap-[24px]
${
lengthImgClinics === 1
? "md:!hidden"
: lengthImgClinics === 2
? "grid-cols-1 grid-rows-1"
: lengthImgClinics === 3
? "grid-cols-1 grid-rows-2"
: lengthImgClinics === 4
? "grid-cols-2 grid-rows-2"
: ""
${lengthImgClinics === 1
? "md:!hidden"
: lengthImgClinics === 2
? "grid-cols-1 grid-rows-1"
: lengthImgClinics === 3
? "grid-cols-1 grid-rows-2"
: lengthImgClinics === 4
? "grid-cols-2 grid-rows-2"
: ""
}
`}
>
@@ -25,20 +24,19 @@ function List({ data }) {
idx !== 0 ? (
<div
key={idx}
className={`${
lengthImgClinics === 3
className={`${lengthImgClinics === 3
? "h-full"
: lengthImgClinics === 4
? idx === lengthImgClinics - 1
? "w-[calc(200%+16px)] lg:w-[calc(200%+24px)]"
: "w-full h-full"
: "h-full w-full"
}`}
}`}
>
<CustomLoading width="full" height={190}>
<Image
className="rounded-[8px] overflow-hidden w-full h-full object-cover"
src={img.url || ""}
src={img.url || "/assets/images/clinic-img.png"}
alt="img clinic"
height={204}
width={288}
+1 -1
View File
@@ -26,7 +26,7 @@ function ItemClinic({ setFilteredClinics, data, loading }) {
width={60}
height={60}
className="object-cover rounded-full w-[64px] md:w-[68px] lg:w-[72px] h-[64px] md:h-[68px] lg:h-[72px]"
src={data.clinic_logo[0].url || ""}
src={data.clinic_logo?.[0]?.url || "/assets/images/logo.png"}
alt="img clinic"
/>
</CircularLoading>
+1 -1
View File
@@ -16,7 +16,7 @@ function Title({ doctor }) {
w-[40px] sm:w-[81px] md:w-[123px] lg:w-[164px]
h-[40px] sm:h-[81px] md:h-[123px] lg:h-[164px]
"
src={doctor?.img[0]?.url}
src={doctor?.img?.[0]?.url || "/assets/images/user.png"}
alt="img-doctor"
height={164}
width={164}
+3 -3
View File
@@ -3,9 +3,9 @@ import Footer from "./footer";
import Header from "./header";
import { cookies } from "next/headers";
function StLayout({ children, name }) {
const { matchedCity } = getStateInfo();
const cookieStore = cookies();
async function StLayout({ children, name }) {
const { matchedCity } = await getStateInfo();
const cookieStore = await cookies();
const token = cookieStore.get("access_token");
return (
+1 -1
View File
@@ -1,7 +1,7 @@
import { cookies } from "next/headers";
export async function getUser() {
const cookieStore = cookies();
const cookieStore = await cookies();
const raw =
cookieStore.get("access_token") &&
cookieStore.get("refresh_token") &&
+2 -2
View File
@@ -7,9 +7,9 @@ const MAIN_DOMAIN = "https://nobat724.com";
* Determines if the current domain should have a canonical tag
* and returns the canonical URL if needed
*/
export function getCanonicalUrl() {
export async function getCanonicalUrl() {
try {
const headersList = headers();
const headersList = await headers();
const host = headersList.get("host") || "";
const pathname = headersList.get("x-pathname") || "/";
+2 -2
View File
@@ -4,8 +4,8 @@ import { headers } from "next/headers";
import citiesData from "@/data/city.json";
import statesData from "@/data/state.json";
export function getStateInfo() {
const headersList = headers();
export async function getStateInfo() {
const headersList = await headers();
const host = headersList.get("host") || "";
const subdomain = host.split(".")[0];
-4
View File
@@ -3,10 +3,6 @@ const nextConfig = {
output: "standalone",
// Add other configurations below
reactStrictMode: true,
swcMinify: true,
experimental: {
missingSuspenseWithCSRBailout: false,
},
images: {
unoptimized: true,
remotePatterns: [
+740 -1338
View File
File diff suppressed because it is too large Load Diff
+26 -27
View File
@@ -13,49 +13,48 @@
"@casl/react": "^5.0.0",
"@emotion/cache": "^11.11.0",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@maptiler/sdk": "^2.4.0",
"@material-ui/core": "^4.11.2",
"@mui/icons-material": "^7.1.0",
"@mui/material": "^7.1.0",
"@mui/styled-engine-sc": "^6.0.0-alpha.18",
"@mui/x-charts": "^7.16.0",
"@mui/x-date-pickers": "^7.17.0",
"@next/third-parties": "^15.1.0",
"@emotion/styled": "^11.14.1",
"@maptiler/sdk": "^2.5.1",
"@mui/icons-material": "^7.3.6",
"@mui/material": "^7.3.6",
"@mui/styled-engine-sc": "^6.4.9",
"@mui/x-charts": "^7.29.1",
"@mui/x-date-pickers": "^7.29.4",
"@next/third-parties": "^15.5.7",
"aos": "^2.3.4",
"axios": "^1.7.7",
"axios": "^1.13.2",
"date-fns": "^3.6.0",
"dayjs": "^1.11.13",
"dayjs": "^1.11.19",
"html2canvas": "^1.4.1",
"i": "^0.3.7",
"jalaali-js": "^1.2.8",
"jalaali-react-date-picker": "^1.0.18",
"jalali-moment": "^3.3.11",
"js-cookie": "^3.0.5",
"jspdf": "^3.0.1",
"jspdf": "^3.0.4",
"moment-jalaali": "^0.10.4",
"next": "^14.2.20",
"next-themes": "^0.3.0",
"npm": "^10.8.2",
"next": "^15.5.7",
"next-themes": "^0.4.6",
"npm": "^10.9.4",
"qrcode": "^1.5.4",
"qrcode.react": "^4.2.0",
"react": "^18.0.0",
"react-dom": "^18",
"react-easy-crop": "^5.1.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-easy-crop": "^5.5.6",
"react-google-map-picker": "^1.2.3",
"react-images-uploading": "^3.1.7",
"react-toastify": "^10.0.6",
"sharp": "^0.34.1",
"styled-components": "^6.1.11",
"stylis": "^4.3.4",
"react-toastify": "^11.0.5",
"sharp": "^0.34.5",
"styled-components": "^6.1.19",
"stylis": "^4.3.6",
"stylis-plugin-rtl": "^2.1.1",
"swiper": "^11.1.9",
"swiper": "^11.2.10",
"uninstall": "^0.0.0"
},
"devDependencies": {
"cross-env": "^7.0.3",
"postcss": "^8",
"prettier": "^3.5.3",
"tailwindcss": "^3.4.1"
"postcss": "^8.5.6",
"prettier": "^3.7.4",
"tailwindcss": "^3.4.18"
}
}
}