diff --git a/pages/_app.tsx b/pages/_app.tsx index e0934da..a46da0b 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -117,16 +117,16 @@ export default function App({ Component, pageProps: { session, ...pageProps }, } } // build time localization. Is it working for _app.tsx?d -// export async function getStaticProps(context) { -// const messages = (await import(`../content/i18n/${locale}.json`)).default; -// console.log("Loaded messages for locale:", locale, messages); -// return { -// props: { -// // You can get the messages from anywhere you like. The recommended -// // pattern is to put them in JSON files separated by locale and read -// // the desired one based on the `locale` received from Next.js. -// // messages: (await import(`../content/i18n/${context.locale}.json`)).default -// messages -// } -// }; -// } +export async function getStaticProps(context) { + const messages = (await import(`../content/i18n/${context.locale}.json`)).default; + console.log("Loaded messages for locale:", context.locale, messages); + return { + props: { + // You can get the messages from anywhere you like. The recommended + // pattern is to put them in JSON files separated by locale and read + // the desired one based on the `locale` received from Next.js. + // messages: (await import(`../content/i18n/${context.locale}.json`)).default + messages + } + }; +} diff --git a/pages/auth/signin.tsx b/pages/auth/signin.tsx index 40ac6b0..93107f7 100644 --- a/pages/auth/signin.tsx +++ b/pages/auth/signin.tsx @@ -65,7 +65,7 @@ export default function SignIn({ csrfToken }) { setEmail(e.target.value)} className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" diff --git a/pages/cart/publishers/edit/[id].tsx b/pages/cart/publishers/edit/[id].tsx index 331e52a..df994ba 100644 --- a/pages/cart/publishers/edit/[id].tsx +++ b/pages/cart/publishers/edit/[id].tsx @@ -1,5 +1,6 @@ import axiosServer from '../../../../src/axiosServer'; import NewPubPage from "../new"; +const common = require('../../../../src/helpers/common'); export default NewPubPage; import { Assignment, Shift, UserRole, AvailabilityType } from "prisma/prisma-client"; @@ -40,6 +41,8 @@ function getShiftGroups(shifts: [Shift]) { export const getServerSideProps = async (context) => { const axios = await axiosServer(context); + const prisma = common.getPrismaClient(); + // const isAdmin = await ProtectedRoute.IsInRole(UserRole.ADMIN); does not work on server side context.res.setHeader("Cache-Control", "s-maxage=1, stale-while-revalidate"); if (!context.query || !context.query.id) { @@ -47,13 +50,20 @@ export const getServerSideProps = async (context) => { props: {} }; } - var url = process.env.NEXT_PUBLIC_PUBLIC_URL + "/api/data/publishers/" + context.query.id + "?include=availabilities,assignments,assignments.shift"; - console.log("GET PUBLISHER FROM:" + url) - try { - const { data: item } = await axios.get(url); - } catch (error) { - console.log("error fetching publisher: " + error); - //redirect to message page with message "no account found". get user from session + const item = await prisma.publisher.findUnique({ + where: { + id: context.query.id + }, + include: { + availabilities: true, + assignments: { + include: { + shift: true + } + } + } + }); + if (!item) { const user = context.req.session.user; return { redirect: { @@ -62,7 +72,6 @@ export const getServerSideProps = async (context) => { }, } } - // item.allShifts = item.assignments.map((a: Assignment[]) => a.shift); // ============================================================ @@ -113,7 +122,7 @@ export const getServerSideProps = async (context) => { // console.dir(item, { depth: null }); return { props: { - item: item + item: common.convertDatesToISOStrings(item), }, }; }; diff --git a/src/helpers/common.js b/src/helpers/common.js index 45137ea..5c766e3 100644 --- a/src/helpers/common.js +++ b/src/helpers/common.js @@ -697,30 +697,30 @@ exports.copyToClipboard = function (event, text) { -exports.getUser = async function (req) { - // Use req if provided (server-side), otherwise call getSession without args (client-side) - const session = req ? await getSession({ req }) : await getSession(); - return session?.user; -} +// exports.getUser = async function (req) { +// // Use req if provided (server-side), otherwise call getSession without args (client-side) +// const session = req ? await getSession({ req }) : await getSession(); +// return session?.user; +// } -exports.isUserInRole = async function (req, allowedRoles = []) { - const user = await exports.getUser(req); +// exports.isUserInRole = function (req, allowedRoles = []) { +// const user = exports.getUser(req); - // Check if the user is authenticated - if (!user) { - return false; - } +// // Check if the user is authenticated +// if (!user) { +// return false; +// } - // If no specific roles are required, return true as the user is authenticated - if (allowedRoles.length === 0) { - return true; - } +// // If no specific roles are required, return true as the user is authenticated +// if (allowedRoles.length === 0) { +// return true; +// } - // Check if the user's role is among the allowed roles - // Ensure role exists and is a valid UserRole - const userRole = user.role; - return allowedRoles.includes(userRole); -} +// // Check if the user's role is among the allowed roles +// // Ensure role exists and is a valid UserRole +// const userRole = user.role; +// return allowedRoles.includes(userRole); +// } @@ -762,6 +762,37 @@ exports.getInitials = function (names) { exports.addMinutes = function (date, minutes) { return new Date(date.getTime() + minutes * 60000); // 60000 milliseconds in a minute } + +/** +* Recursively converts all Date objects in an object to ISO strings. +* @param {Object} obj - The object to convert. +* @returns {Object} - The new object with all Date objects converted to ISO strings. +*/ +exports.convertDatesToISOStrings = function (obj) { + if (obj === null || obj === undefined) { + return obj; + } + + if (obj instanceof Date) { + return obj.toISOString(); + } + + if (Array.isArray(obj)) { + return obj.map(exports.convertDatesToISOStrings); + } + + if (typeof obj === 'object') { + const keys = Object.keys(obj); + return keys.reduce((acc, key) => { + acc[key] = exports.convertDatesToISOStrings(obj[key]); + return acc; + }, {}); + } + + return obj; +} + + // exports.getInitials = function (names) { // const parts = names.split(' '); // Split the full name into parts // if (parts.length === 0) { diff --git a/src/templates/emails/emailConfirm.hbs b/src/templates/emails/emailConfirm.hbs new file mode 100644 index 0000000..3c51d1d --- /dev/null +++ b/src/templates/emails/emailConfirm.hbs @@ -0,0 +1,23 @@ +{{!-- Subject: ССОМ: Нужен е заместник--}} +{{!-- Text: Plain text version of your email. If not provided, HTML tags will be stripped from the HTML version for the +text version. --}} + +
+

Добре дошъл

+

Здравей, {{firstName}} {{lastName}}

+

+ Моля, потвърди своя имейл адрес, като кликнеш на бутона по-долу. +

+

+ + ОК + +

+ {{!--

Thank you very much for considering my request.

+

Best regards,
{{name}}

--}} +
+ \ No newline at end of file