dsql-admin/dsql-app/.local_dist/server/chunks/7531.js
2024-11-05 12:12:42 +01:00

530 lines
27 KiB
JavaScript

"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<React.SetStateAction<any>> ]} */ // @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(`./jsonData/dbSchemas/users/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
}
};
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
/***/ })
};
;