"use strict"; exports.id = 7531; exports.ids = [7531]; exports.modules = { /***/ 7531: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, { "SingleDbUserContext": () => (/* binding */ SingleDbUserContext), "default": () => (/* binding */ DatabaseSingleUserPage), "getServerSideProps": () => (/* binding */ getServerSideProps) }); // EXTERNAL MODULE: external "react/jsx-runtime" var jsx_runtime_ = __webpack_require__(997); // EXTERNAL MODULE: external "react" var external_react_ = __webpack_require__(6689); var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_); // EXTERNAL MODULE: ./layouts/AdminLayout.jsx + 2 modules var AdminLayout = __webpack_require__(4858); // EXTERNAL MODULE: ./functions/backend/userAuth.js var userAuth = __webpack_require__(370); var userAuth_default = /*#__PURE__*/__webpack_require__.n(userAuth); // EXTERNAL MODULE: ./components/general/ExtraContentDatabase.jsx var ExtraContentDatabase = __webpack_require__(4941); // EXTERNAL MODULE: ./functions/backend/grabDelegatedUserFromCookie.js var grabDelegatedUserFromCookie = __webpack_require__(5116); var grabDelegatedUserFromCookie_default = /*#__PURE__*/__webpack_require__.n(grabDelegatedUserFromCookie); // EXTERNAL MODULE: ./components/general/Breadcrumbs.jsx var Breadcrumbs = __webpack_require__(424); // EXTERNAL MODULE: ./components/general/BackButton.jsx var BackButton = __webpack_require__(1781); // EXTERNAL MODULE: ./functions/frontend/fetchApi.js var fetchApi = __webpack_require__(6729); // EXTERNAL MODULE: ./components/general/LoadingBlock.jsx var LoadingBlock = __webpack_require__(5264); // EXTERNAL MODULE: ./components/admin/users/UserImage.jsx var UserImage = __webpack_require__(2733); ;// CONCATENATED MODULE: ./components/admin/users/SingleDbUserContent.jsx // @ts-check /** * ============================================================================== * Imports * ============================================================================== */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** * ============================================================================== * Main Component { Functional } * ============================================================================== * @param {Object} props - Server props */ function SingleDbUserContent(props) { /** * Get Contexts * * @abstract { React.useContext } */ const { singleUser , database , user } = external_react_default().useContext(SingleDbUserContext); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Javascript Variables * * @abstract Non hook variables and functions */ const userFields = Object.keys(singleUser).filter((key)=>!key.match(/^id$|^date_|^user_id$|^social_|^disk_usage|user_type/)); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * React Hooks * * @abstract { useState, useEffect, useRef, etc ... } */ const [loading, setLoading] = external_react_default().useState(false); /** @type {[ userImage: any, setUserImage: React.Dispatch> ]} */ // @ts-ignore const [userImage, setUserImage] = external_react_default().useState(singleUser["image"]); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Function Return * * @abstract Main Function Return */ return /*#__PURE__*/ (0,jsx_runtime_.jsxs)((external_react_default()).Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "flex-col items-start gap-0 w-full", children: [ /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "w-full justify-between flex-wrap", children: [ /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { children: [ /*#__PURE__*/ jsx_runtime_.jsx(BackButton/* default */.Z, {}), userImage && /*#__PURE__*/ jsx_runtime_.jsx("img", { src: userImage, alt: "", className: "avatar large outlined" }), /*#__PURE__*/ (0,jsx_runtime_.jsxs)("h1", { className: "text-3xl m-0", children: [ singleUser.first_name, " ", singleUser.last_name ] }) ] }), /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { children: [ /*#__PURE__*/ jsx_runtime_.jsx("a", { href: `/admin/${user?.id}/databases/${database.db_slug}/users/${singleUser.id}/change-password`, className: "button outlined gray", children: "Change Password" }), /*#__PURE__*/ jsx_runtime_.jsx("button", { className: "bg-red-500", onClick: (e)=>{ setLoading(true); if (window.confirm("Delete this user?")) { (0,fetchApi/* default */.Z)("/api/deleteDbUser", { method: "post", body: { userId: singleUser.id, dbFullName: database.db_full_name } }, true).then((res)=>{ if (res.success) window.location.pathname = `/admin/${user?.id}/databases/${database.db_slug}/users`; }); } }, children: "Delete User" }) ] }) ] }), /*#__PURE__*/ jsx_runtime_.jsx(Breadcrumbs/* default */.Z, { user: user }) ] }), /*#__PURE__*/ (0,jsx_runtime_.jsxs)("section", { className: "paper", children: [ loading && /*#__PURE__*/ jsx_runtime_.jsx(LoadingBlock/* default */.Z, {}), /*#__PURE__*/ jsx_runtime_.jsx("div", { className: "w-full flex-col items-stretch", children: /*#__PURE__*/ (0,jsx_runtime_.jsxs)("form", { className: "flex flex-col items-stretch gap-4", onSubmit: (e)=>{ e.preventDefault(); setLoading(true); /** @type {HTMLFormElement} */ // @ts-ignore const form = e.target; const formFields = Array.from(form); /** @type {any} */ const formFieldsObject = {}; formFields.forEach((/** @type {any} */ field)=>{ if (field?.nodeName?.match(/button/i)) return; if (!field?.name || !field?.value?.match(/./)) return; if (field?.name?.match(/username|email/)) return; formFieldsObject[field.name] = field.value; }); const fetchObject = { dbFullName: database.db_full_name, payload: { ...formFieldsObject, id: singleUser["id"] } }; (0,fetchApi/* default */.Z)("/api/updateDbUser", { method: "post", body: fetchObject }, true).then((res)=>{ if (userImage?.imageBase64) { userImage["imageName"] = `${database.db_slug}-user-${singleUser.id}`; userImage["mimeType"] = "jpeg"; delete userImage["imageBase64Full"]; (0,fetchApi/* default */.Z)("/api/addUserMedia", { method: "post", body: { media: [ userImage ], folder: database.db_slug.replace(/_/g, "-"), type: "image" } }, true).then((_res)=>{ if (_res && _res.mediaData && _res.mediaData[0]?.media_url) { (0,fetchApi/* default */.Z)("/api/updateDbUser", { method: "post", body: { dbFullName: database.db_full_name, payload: { id: singleUser.id, image: _res.mediaData[0].media_url, image_thumbnail: _res.mediaData[0].media_thumbnail_url } } }, true).then((__res)=>{ if (__res.success) window.location.reload(); setTimeout(()=>{ setLoading(false); }, 500); }); } else { window.location.reload(); } }); } else { window.location.reload(); } }); }, children: [ userFields.map((field, index)=>{ if (field?.match(/password|^database|email|username/)) { return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "flex-col items-start w-full gap-1", children: [ /*#__PURE__*/ jsx_runtime_.jsx("label", { htmlFor: field, children: field }), /*#__PURE__*/ jsx_runtime_.jsx("input", { type: "text", name: field, id: field, // @ts-ignore value: singleUser[field], placeholder: field, className: "opacity-40 pointer-events-none", onChange: (e)=>{ e.preventDefault(); } }, index + 1) ] }, index + 1); } if (field?.match(/more_user_data/)) { return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "flex-col items-start w-full gap-1", children: [ /*#__PURE__*/ jsx_runtime_.jsx("label", { htmlFor: field, children: field }), /*#__PURE__*/ jsx_runtime_.jsx("textarea", { name: field, id: field, defaultValue: // @ts-ignore singleUser[field] ? singleUser[field] : undefined, placeholder: field, rows: 6 }, index + 1) ] }, index + 1); } return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "flex-col items-start w-full gap-1", children: [ /*#__PURE__*/ jsx_runtime_.jsx("label", { htmlFor: field, children: field }), /*#__PURE__*/ jsx_runtime_.jsx("input", { type: "text", name: field, id: field, defaultValue: // @ts-ignore singleUser[field] ? singleUser[field] : undefined, placeholder: field }, index + 1) ] }, index + 1); }), /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", { className: "border border-slate-300 dark:border-slate-600 border-solid bg-slate-100 dark:bg-slate-700 rounded p-6 flex-col items-start w-full", children: [ /*#__PURE__*/ jsx_runtime_.jsx("h3", { className: "m-0 text-lg font-semibold mb-1 text-slate-600", children: "Update Image" }), /*#__PURE__*/ jsx_runtime_.jsx(UserImage/* default */.Z, { userImage: userImage, setUserImage: setUserImage, className: "w-full" }) ] }), /*#__PURE__*/ jsx_runtime_.jsx("button", { children: "Update User" }) ] }) }) ] }) ] }); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ // EXTERNAL MODULE: ./package-shared/utils/backend/global-db/DB_HANDLER.js var DB_HANDLER = __webpack_require__(9395); var DB_HANDLER_default = /*#__PURE__*/__webpack_require__.n(DB_HANDLER); // EXTERNAL MODULE: ./package-shared/functions/backend/varDatabaseDbHandler.js var varDatabaseDbHandler = __webpack_require__(1206); var varDatabaseDbHandler_default = /*#__PURE__*/__webpack_require__.n(varDatabaseDbHandler); ;// CONCATENATED MODULE: ./pages/admin/[user_id]/databases/[single]/users/[user]/index.jsx // @ts-check /** * ============================================================================== * Imports * ============================================================================== */ const fs = __webpack_require__(7147); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** ****************************************************************************** */ /** @type {import("@/package-shared/types").DatabaseSingleUserContextType} */ // @ts-ignore const init = {}; const SingleDbUserContext = /*#__PURE__*/ external_react_default().createContext(init); /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** * ============================================================================== * Main Component { Functional } * ============================================================================== * @param {Object} props - Server props * @param {import("@/package-shared/types").UserType} props.user * @param {import("@/package-shared/types").DSQL_MYSQL_user_databases_Type} props.database * @param {import("@/package-shared/types").DSQL_TableSchemaType} props.table * @param {import("@/package-shared/types").DSQL_DatabaseSchemaType[]} props.dbSchemaData * @param {import("@/package-shared/types").MYSQL_user_users_table_def} props.singleUser * @param {any} props.query * @param {any} props.confirmedDelegetedUser */ function DatabaseSingleUserPage({ user , database , table , dbSchemaData , singleUser , query , confirmedDelegetedUser , }) { /** * Get Contexts * * @abstract { React.useContext } */ //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Javascript Variables * * @abstract Non hook variables and functions */ const pageTitle = `${singleUser.first_name} ${singleUser.last_name} Users | Datasquirel"`; const pageDescription = "Welcome to your data app"; let head = /*#__PURE__*/ (0,jsx_runtime_.jsxs)(jsx_runtime_.Fragment, { children: [ /*#__PURE__*/ jsx_runtime_.jsx("title", { children: pageTitle }), /*#__PURE__*/ jsx_runtime_.jsx("meta", { name: "description", content: pageDescription }) ] }); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * React Hooks * * @abstract { useState, useEffect, useRef, etc ... } */ //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Function Return * * @abstract Main Function Return */ return /*#__PURE__*/ jsx_runtime_.jsx(AdminLayout/* default */.Z, { head: head, user: user, extraHeaderContent: /*#__PURE__*/ jsx_runtime_.jsx(ExtraContentDatabase/* default */.Z, { database: database, query: query, confirmedDelegetedUser: confirmedDelegetedUser, user: user }), children: /*#__PURE__*/ jsx_runtime_.jsx(SingleDbUserContext.Provider, { value: { user, database, table, dbSchemaData, singleUser, query, confirmedDelegetedUser }, children: /*#__PURE__*/ jsx_runtime_.jsx(SingleDbUserContent, {}) }) }); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** * ============================================================================== * Server Side Props or Static Props * ============================================================================== * @type {import("next").GetServerSideProps} */ async function getServerSideProps({ req , res , query }) { /** * User Auth * * @description User Auth */ const user = await userAuth_default()(req, res); if (!user?.logged_in_status) { return { redirect: { destination: "/logout", permanent: false } }; } //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Page/Site Data Data Fetching * * @description Fetch data on the server before returning */ const dbUserData = await grabDelegatedUserFromCookie_default()({ request: req, user: user, // @ts-ignore databaseSlug: query.single, query }); const dbUserDataObj = dbUserData; if (!dbUserDataObj) { return { redirect: { destination: "/admin", permanent: false } }; } const { dbUserId , rootUserId } = dbUserDataObj; const database = await DB_HANDLER_default()(`SELECT * FROM user_databases WHERE user_id='${dbUserId}' AND db_slug='${query.single}'`); if (!database || !database[0]) { console.log("Database Not Found"); return { redirect: { destination: `/admin/${user?.id}/databases`, permanent: false } }; } //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Confirm delegated User * * @description Confirm delegated User */ let confirmedDelegetedUser = dbUserData; //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Page/Site Data Data Fetching * * @description Fetch data on the server before returning */ /** @type {import("@/package-shared/types").DSQL_DatabaseSchemaType[]} */ const dbSchemaData = JSON.parse(fs.readFileSync(`${process.env.DSQL_USER_DB_SCHEMA_PATH}/user-${dbUserId}/main.json`, "utf-8")); const tables = dbSchemaData.filter((db)=>db.dbFullName === database[0].db_full_name)[0]?.tables; const targetTable = tables.filter((table)=>table.tableName === "users")[0]; const singleUser = await varDatabaseDbHandler_default()({ database: database[0].db_full_name, queryString: `SELECT * FROM users WHERE id='${query.user}'`, tableSchema: targetTable }); if (!singleUser?.[0]) { return { redirect: { destination: `/admin/${user?.id}/databases/${database[0].db_slug}/users`, permanent: false } }; } /** * Server props return * * @description Return data fetched on the server side */ return { props: { user: user, database: database?.[0] || null, table: targetTable ? targetTable : {}, dbSchemaData: dbSchemaData, singleUser: singleUser?.[0] || null, query, confirmedDelegetedUser } }; //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } /***/ }) }; ;