diff --git a/package-lock.json b/package-lock.json index a3b69e1..e2514ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "clsx": "^2.1.1", "cmdk": "^1.0.0", "flatpickr": "^4.6.13", + "jsvectormap": "^1.6.0", "lucide-react": "^0.462.0", "next": "15.0.3", "next-crypto": "^1.0.8", @@ -2049,6 +2050,11 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "node_modules/jsvectormap": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/jsvectormap/-/jsvectormap-1.6.0.tgz", + "integrity": "sha512-4b/v4GWqiggHGN+CBOJBhIdpSGLY6wVetmMKiOlQ7oVM1PIzsLlSBJDMQd9ycLk6Rmzg4aFua35QDrk5HPb1YQ==" + }, "node_modules/libphonenumber-js": { "version": "1.11.15", "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.15.tgz", diff --git a/package.json b/package.json index 4c71df6..5d6201a 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "clsx": "^2.1.1", "cmdk": "^1.0.0", "flatpickr": "^4.6.13", + "jsvectormap": "^1.6.0", "lucide-react": "^0.462.0", "next": "15.0.3", "next-crypto": "^1.0.8", diff --git a/src/apicalls/api-fetcher.tsx b/src/apicalls/api-fetcher.tsx index 7d216d7..9a20015 100644 --- a/src/apicalls/api-fetcher.tsx +++ b/src/apicalls/api-fetcher.tsx @@ -27,6 +27,7 @@ const prepareResponse = async (response: any) => { const errorResponse = responseJson?.error || responseJson?.Error; const messageResponse = (responseJson?.message || "").toString(); const completeResponse = responseJson?.completed; + const preparedResponse = { completed: completeResponse, message: messageResponse, diff --git a/src/apicalls/cookies/token.tsx b/src/apicalls/cookies/token.tsx index 34728b3..9fa25b6 100644 --- a/src/apicalls/cookies/token.tsx +++ b/src/apicalls/cookies/token.tsx @@ -20,7 +20,6 @@ async function check_access_token_is_valid() { "GET", false ); - console.log("response", response?.status); return response?.status === 200 ? true : false; } @@ -48,9 +47,17 @@ async function retrieve_access_objects() { return decrpytAccessObject ? JSON.parse(decrpytAccessObject) : null; } +async function retrieve_available_events() { + const cookieStore = await cookies(); + const encrpytAccessObject = cookieStore.get("availableEvents")?.value || ""; + const decrpytAccessObject = await nextCrypto.decrypt(encrpytAccessObject); + return decrpytAccessObject ? JSON.parse(decrpytAccessObject) : null; +} + export { check_access_token_is_valid, retrieve_access_token, retrieve_user_type, retrieve_access_objects, + retrieve_available_events, }; diff --git a/src/apicalls/dashboard/menu.tsx b/src/apicalls/dashboard/menu.tsx new file mode 100644 index 0000000..1bb7756 --- /dev/null +++ b/src/apicalls/dashboard/menu.tsx @@ -0,0 +1,27 @@ +"use server"; +import { fetchDataWithToken } from "../api-fetcher"; +import { cookies } from "next/headers"; +import { baseUrl, cookieObject, tokenSecret } from "@/apicalls/basics"; +import NextCrypto from "next-crypto"; + +const eventList = `${baseUrl}/event/list`; +const nextCrypto = new NextCrypto(tokenSecret); + +async function retrieve_event_list() { + const cookieStore = await cookies(); + const encrpytAccessToken = cookieStore.get("accessToken")?.value || ""; + const decryptedAccessToken = + (await nextCrypto.decrypt(encrpytAccessToken)) || ""; + + const response = await fetchDataWithToken( + eventList, + decryptedAccessToken, + {}, + "GET", + false + ); + console.log("response", response); + return response; +} + +export { retrieve_event_list }; diff --git a/src/apicalls/events/available.tsx b/src/apicalls/events/available.tsx new file mode 100644 index 0000000..4a83073 --- /dev/null +++ b/src/apicalls/events/available.tsx @@ -0,0 +1,34 @@ +"use server"; +import { fetchDataWithToken } from "../api-fetcher"; +import { cookies } from "next/headers"; +import { baseUrl, cookieObject, tokenSecret } from "@/apicalls/basics"; +import NextCrypto from "next-crypto"; + +const availableEventsURL = `${baseUrl}/access/endpoints/available`; + +async function setAvailableEvents(accessToken: string) { + const cookieStore = await cookies(); + const nextCrypto = new NextCrypto(tokenSecret); + + const availableResponse: any = await fetchDataWithToken( + availableEventsURL, + accessToken, + {}, + "POST", + false + ); + + if (availableResponse.status === 200) { + const availableEventData = Array.from(availableResponse?.result) || []; + const availableEvents = await nextCrypto.encrypt( + JSON.stringify({ availableEvents: availableEventData }) + ); + cookieStore.set({ + name: "availableEvents", + value: availableEvents, + ...cookieObject, + }); + } +} + +export { setAvailableEvents }; diff --git a/src/apicalls/login/login.tsx b/src/apicalls/login/login.tsx index 71da6ed..382906d 100644 --- a/src/apicalls/login/login.tsx +++ b/src/apicalls/login/login.tsx @@ -96,7 +96,6 @@ async function login_select_employee(payload: LoginSelectEmployee) { "POST", false ); - const responseData = selectResponse?.data; if (selectResponse.status === 200) { const usersSelection = await nextCrypto.encrypt( JSON.stringify({ @@ -110,7 +109,7 @@ async function login_select_employee(payload: LoginSelectEmployee) { ...cookieObject, }); } - return responseData; + return selectResponse; } async function login_select_occupant(payload: LoginSelectOccupant) { diff --git a/src/apicalls/login/password.tsx b/src/apicalls/login/password.tsx index fd6ac4d..1b75ee5 100644 --- a/src/apicalls/login/password.tsx +++ b/src/apicalls/login/password.tsx @@ -4,6 +4,7 @@ import { baseUrl } from "@/apicalls/basics"; const createPasswordEndpoint = `${baseUrl}/authentication/create_password`; const changePasswordEndpoint = `${baseUrl}/authentication/change_password`; +const forgotPasswordEndpoint = `${baseUrl}/authentication/reset_password`; interface createPasswordViaToken { token: string; @@ -17,6 +18,11 @@ interface changePasswordViaToken { newPassword: string; } +interface sendForgotPasswordEmail { + domain: string; + accessKey: string; +} + async function create_password_via_token(payload: createPasswordViaToken) { const createPasswordResponse: any = await fetchData( createPasswordEndpoint, @@ -45,4 +51,21 @@ async function change_password_via_token(payload: changePasswordViaToken) { return changePasswordResponse; } -export { create_password_via_token, change_password_via_token }; +async function send_forgot_password_email(payload: sendForgotPasswordEmail) { + const response: any = await fetchData( + forgotPasswordEndpoint, + { + domain: payload.domain, + access_key: payload.accessKey, + }, + "POST", + false + ); + return response; +} + +export { + create_password_via_token, + change_password_via_token, + send_forgot_password_email, +}; diff --git a/src/app/build/page.tsx b/src/app/build/page.tsx new file mode 100644 index 0000000..a107815 --- /dev/null +++ b/src/app/build/page.tsx @@ -0,0 +1,13 @@ +"use server"; +import React from "react"; + +const BuildPage: React.FC = async () => { + return ( +
Welcome to the build page!
+| + {header} + | + ))} +|||||
|---|---|---|---|---|---|
+ + {packageItem.name} ++ |
+
+ + {packageItem.name} ++ |
+
+ + {packageItem.name} ++ |
+
+ + {packageItem.name} ++ |
+
+ + {packageItem.invoiceDate} + + |
+
+ + {packageItem.status ? "Evet" : "Hayır"} + + |
+
| + {header} + | + ))} +|||||
|---|---|---|---|---|---|
+ + {packageItem.name} ++ |
+
+ + {packageItem.name} ++ |
+
+ + {packageItem.name} ++ |
+
+ + {packageItem.name} ++ |
+
+ + {packageItem.invoiceDate} + + |
+
+ + {packageItem.status ? "Evet" : "Hayır"} + + |
+
Welcome to the dashboard!
-| - Package - | -- Invoice date - | -- Status - | -- Actions - | -|||||||
|---|---|---|---|---|---|---|---|---|---|---|
- - {packageItem.name} --${packageItem.price} - |
-
- - {packageItem.invoiceDate} - - |
-
- >({
+ resolver: zodResolver(formSchema),
+ });
+
+ function selectItem({ key }: { key: number }) {
+ packageList.map((item, index) => {
+ if (index === key) {
+ item.selected = !item.selected;
+ }
+ });
+ setPackageList([...packageList] as any);
+ }
+
+ function cleanSelection() {
+ packageList.map((item) => {
+ item.selected = false;
+ });
+ setPackageList([...packageList] as any);
+ }
+
+ function cleanSearch() {
+ form.setValue("searchText", "");
+ setPackageList(Array.from(packageData));
+ }
+
+ function search(values: z.infer |
-
-
-
+
+
+
+
+
+
+
- );
+ {packageItem.name}
+
+
+
-
|
+
+ + {packageItem.name} ++ |
+
+ + {packageItem.invoiceDate} + + |
+
+ + {packageItem.status ? "Evet" : "Hayır"} + + |
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit + suspendisse. +
- return ( - <> -- Lorem ipsum dolor sit amet, consectetur adipiscing elit - suspendisse. -
- - - - -+ Lorem ipsum dolor sit amet, consectetur adipiscing elit + suspendisse. +
+ + + + +