"use strict";
exports.id = 9035;
exports.ids = [9035,2348];
exports.modules = {

/***/ 2943:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {


// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ ImportExportEntries)
});

// 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: ./components/general/LoadingBlock.jsx
var LoadingBlock = __webpack_require__(5264);
// EXTERNAL MODULE: ./functions/frontend/inputFileToBase64.js
var inputFileToBase64 = __webpack_require__(3314);
// EXTERNAL MODULE: ./functions/frontend/fetchApi.js
var fetchApi = __webpack_require__(6729);
;// CONCATENATED MODULE: ./components/admin/databases/functions/import-export-handler.js
// @ts-check


/**
 * Import ot Export Table Data
 * ==============================================================================
 * @param {Object} param0
 * @param {"import" | "export"} param0.paradigm
 * @param {any} [param0.payload]
 * @param {any} param0.setLoading
 * @param {import("@/package-shared/types").DSQL_TableSchemaType} param0.table
 * @param {import("@/package-shared/types").DSQL_MYSQL_user_databases_Type} param0.database
 */ function importExportHandler({ paradigm , payload , setLoading , table , database ,  }) {
    setLoading(true);
    if (paradigm === "import") {}
    (0,fetchApi/* default */.Z)("/api/exportTableData", {
        method: "POST",
        body: {
            paradigm,
            dbName: database.db_slug,
            tableName: table.tableName,
            payload: payload
        }
    }, true).then((res)=>{
        if (res.success) {
            if (paradigm == "export") {
                const data = res.data;
                const jsonString = JSON.stringify(data || [], null, 4);
                const blob = new Blob([
                    jsonString
                ], {
                    type: "application/json"
                });
                const url = URL.createObjectURL(blob);
                const a = document.createElement("a");
                a.href = url;
                a.style.display = "none";
                a.download = `${database.db_slug}-${table.tableName}-${Date.now()}.json`;
                document.body.appendChild(a);
                a.click();
                document.body.removeChild(a);
            } else if (paradigm == "import") {
                window.alert("Data Imported Successfully");
                window.location.reload();
            }
        } else if (res.msg) {
            window.alert(res.msg);
        }
    }).catch((error)=>{
        console.log(error);
    }).finally(()=>{
        setLoading(false);
    });
}

;// CONCATENATED MODULE: ./components/admin/databases/ImportExportEntries.jsx
// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 




/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 * # Import Export Entries
 * ===================================================
 * @param {object} props
 * @param {import("@/package-shared/types").DSQL_MYSQL_user_databases_Type} props.database
 * @param {import("@/package-shared/types").DSQL_TableSchemaType} props.table
 * @returns
 */ function ImportExportEntries({ database , table  }) {
    const [loading, setLoading] = external_react_default().useState(false);
    const [inputReady, setInputReady] = external_react_default().useState(true);
    /** @type {React.RefObject<HTMLInputElement>} */ const fileRef = external_react_default().useRef(null);
    /** @type {React.RefObject<HTMLFormElement>} */ const formRef = external_react_default().useRef(null);
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    function resetForm() {
        setInputReady(false);
        setTimeout(()=>{
            setInputReady(true);
        }, 200);
    }
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
        className: "relative",
        children: [
            loading && /*#__PURE__*/ jsx_runtime_.jsx(LoadingBlock/* default */.Z, {
                width: "15px"
            }),
            /*#__PURE__*/ jsx_runtime_.jsx("div", {
                className: "button outlined gray",
                onClick: (e)=>{
                    importExportHandler({
                        paradigm: "export",
                        database,
                        setLoading,
                        table
                    });
                },
                children: "Export"
            }),
            /*#__PURE__*/ jsx_runtime_.jsx("div", {
                className: "button outlined gray",
                onClick: (e)=>{
                    fileRef.current?.addEventListener("change", (e)=>{
                        setLoading(true);
                        /** @type {HTMLInputElement} */ // @ts-ignore
                        const inputEl = e.target;
                        if (!inputEl.files?.[0]) {
                            window.alert("No FIles selected");
                            setLoading(false);
                            return;
                        }
                        (0,inputFileToBase64/* default */.Z)({
                            inputFile: inputEl.files[0]
                        }).then((fileObject)=>{
                            if (window.confirm(`Use this file '${fileObject.fileName}' as your import file?`)) {
                                importExportHandler({
                                    paradigm: "import",
                                    payload: fileObject.fileBase64,
                                    database,
                                    setLoading,
                                    table
                                });
                                resetForm();
                            } else {
                                setLoading(false);
                                resetForm();
                            }
                        });
                    });
                    fileRef.current?.click();
                },
                children: "Import"
            }),
            inputReady && /*#__PURE__*/ jsx_runtime_.jsx("input", {
                type: "file",
                name: "json_file_input",
                id: "json_file_input",
                accept: ".json",
                className: "hidden",
                ref: fileRef
            })
        ]
    });
}


/***/ }),

/***/ 3684:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (/* binding */ MoreTableOptions)
/* harmony export */ });
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(997);
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6689);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_tiny_popover__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7076);
/* harmony import */ var react_tiny_popover__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_tiny_popover__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2423);
/* harmony import */ var lucide_react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lucide_react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _SyncDataButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(436);
// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 




/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 * # Import Export Entries
 * ===================================================
 * @param {object} props
 * @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 {any} props.query
 * @returns
 */ function MoreTableOptions({ database , table , dbSchemaData , query ,  }) {
    const [open, setOpen] = react__WEBPACK_IMPORTED_MODULE_1___default().useState(false);
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(react_tiny_popover__WEBPACK_IMPORTED_MODULE_2__.Popover, {
        isOpen: open,
        onClickOutside: ()=>setOpen(false),
        positions: [
            "bottom"
        ],
        align: "end",
        content: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
            className: "stack items-stretch bg-white rounded shadow-md gap-0 min-w-[200px]",
            children: [
                /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_SyncDataButton__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z, {
                    database,
                    table,
                    setOpenPopover: setOpen,
                    dbSchemaData,
                    query
                }),
                /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("hr", {
                    className: "m-0"
                })
            ]
        }),
        containerClassName: "z-[1000]",
        children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("button", {
            onClick: ()=>{
                setOpen(!open);
            },
            className: "outlined gray px-2 py-1.5",
            children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(lucide_react__WEBPACK_IMPORTED_MODULE_3__.Ellipsis, {})
        })
    });
}


/***/ }),

/***/ 436:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {


// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ SyncDataButton)
});

// UNUSED EXPORTS: SyncDataModalContent

// EXTERNAL MODULE: external "react/jsx-runtime"
var jsx_runtime_ = __webpack_require__(997);
// EXTERNAL MODULE: ./components/form/FormRadios.jsx
var FormRadios = __webpack_require__(2348);
// EXTERNAL MODULE: ./components/form/FormSelect.jsx
var FormSelect = __webpack_require__(4114);
// EXTERNAL MODULE: ./components/general/LoadingBlock.jsx
var LoadingBlock = __webpack_require__(5264);
// EXTERNAL MODULE: ./components/general/Modal.jsx
var Modal = __webpack_require__(9471);
// EXTERNAL MODULE: ./functions/frontend/fetchApi.js
var fetchApi = __webpack_require__(6729);
;// CONCATENATED MODULE: ./functions/frontend/syncTableDataFormHandler.js
// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 
/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 * ==============================================================================
 * Auth user on client side
 * ==============================================================================
 * @param {object} params
 * @param {React.FormEvent<HTMLFormElement>} params.e
 * @param {React.Dispatch<React.SetStateAction<boolean>>} params.setLoading
 * @param {import("@/package-shared/types").DSQL_MYSQL_user_databases_Type} params.database
 * @param {import("@/package-shared/types").DSQL_TableSchemaType} params.table
 * @param {any} params.query
 *
 * @requires search-field name attribute
 */ function syncTableDataFormHandler({ e , setLoading , database , table , query ,  }) {
    e.preventDefault();
    setLoading(true);
    /** @type {HTMLFormElement} */ // @ts-ignore
    const formEl = e.target;
    const paradigm = formEl["paradigm"]?.value;
    const dstDbName = formEl["database"]?.value;
    const dstTableName = formEl["table"]?.value;
    /** @type {import("@/pages/api/sync-table-data").SyncTableBody} */ const fetchObject = {
        paradigm: paradigm,
        src: {
            db: database.db_slug,
            table: table.tableName
        },
        dst: {
            db: dstDbName,
            table: dstTableName
        },
        delegated: query.delegated
    };
    const alertMsg = paradigm == "Pull" ? "NOTE: This operation will override the current database entries. Continue?" : "NOTE: This operation will override the selected database entries. Continue?";
    if (!window.confirm(alertMsg)) {
        setTimeout(()=>{
            setLoading(false);
        }, 1000);
        return;
    }
    (0,fetchApi/* default */.Z)("/api/sync-table-data", {
        method: "POST",
        body: {
            ...fetchObject
        }
    }, true).then((res)=>{
        if (res.success) {
            window.alert("Data Sync Successful");
            window.location.reload();
        } else {
            if (res.msg) window.alert("ERROR: " + res.msg);
        }
    }).finally(()=>{
        setTimeout(()=>{
            setLoading(false);
        }, 1000);
    });
} ////////////////////////////////////////
 ////////////////////////////////////////
 ////////////////////////////////////////

// EXTERNAL MODULE: external "lodash"
var external_lodash_ = __webpack_require__(6517);
var external_lodash_default = /*#__PURE__*/__webpack_require__.n(external_lodash_);
// EXTERNAL MODULE: external "react"
var external_react_ = __webpack_require__(6689);
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
;// CONCATENATED MODULE: ./components/admin/databases/SyncDataButton.jsx
// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 








/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 * @param {object} props
 * @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 {React.Dispatch<React.SetStateAction<boolean>>} [props.setOpenPopover]
 * @param {any} props.query
 */ function SyncDataButton({ database , table , setOpenPopover , dbSchemaData , query ,  }) {
    const [open, setOpen] = external_react_default().useState(false);
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    return /*#__PURE__*/ (0,jsx_runtime_.jsxs)(jsx_runtime_.Fragment, {
        children: [
            /*#__PURE__*/ jsx_runtime_.jsx("button", {
                className: "ghost p-3 justify-start",
                onClick: ()=>{
                    setOpen(true);
                    setTimeout(()=>{
                        if (setOpenPopover) setOpenPopover(false);
                    }, 200);
                },
                children: "Sync Data"
            }),
            /*#__PURE__*/ jsx_runtime_.jsx(Modal/* default */.Z, {
                open: open,
                setOpen: setOpen,
                children: /*#__PURE__*/ jsx_runtime_.jsx(SyncDataModalContent, {
                    database,
                    table,
                    dbSchemaData,
                    query
                })
            })
        ]
    });
}
/**
 * @param {object} props
 * @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 {any} props.query
 */ function SyncDataModalContent({ database , table , query , dbSchemaData: initialSchema ,  }) {
    /** @type {[ state: import("@/package-shared/types").DSQL_DatabaseSchemaType[], dispatch: React.Dispatch<React.SetStateAction<import("@/package-shared/types").DSQL_DatabaseSchemaType[]>> ]} */ // @ts-ignore
    const [dbSchemaData, setDbSchemaData] = external_react_default().useState(initialSchema);
    const [paradigm, setParadigm] = external_react_default().useState("Push");
    const [targetDb, setTargetDb] = external_react_default().useState(dbSchemaData?.[0]);
    const [tables, setTables] = external_react_default().useState(targetDb?.tables);
    const [targetTable, setTargetTable] = external_react_default().useState(tables?.[0]);
    const [loading, setLoading] = external_react_default().useState(false);
    const [isCompatible, setIsCompatible] = external_react_default().useState(false);
    external_react_default().useEffect(()=>{
        const isEqual = external_lodash_default().isEqual(table?.fields, targetTable?.fields);
        if (isEqual) {
            setIsCompatible(true);
        } else {
            setIsCompatible(false);
        }
    }, [
        targetTable,
        setTargetDb
    ]);
    external_react_default().useEffect(()=>{
        if (query.delegated) {
            (0,fetchApi/* default */.Z)("/api/get-authorized-databases").then((res)=>{
                if (res.success && res.payload) {
                    setDbSchemaData(res.payload);
                }
            });
        }
    }, []);
    return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
        className: "stack gap-2 relative w-full",
        children: [
            loading || !dbSchemaData && /*#__PURE__*/ jsx_runtime_.jsx(LoadingBlock/* default */.Z, {
                width: "20px"
            }),
            /*#__PURE__*/ jsx_runtime_.jsx("h3", {
                className: "m-0 text-lg",
                children: "Sync Data with another table"
            }),
            !isCompatible ? /*#__PURE__*/ (0,jsx_runtime_.jsxs)("span", {
                className: "info warning inline",
                children: [
                    "The selected table is not compatible with",
                    " ",
                    /*#__PURE__*/ jsx_runtime_.jsx("b", {
                        children: table.tableFullName
                    })
                ]
            }) : /*#__PURE__*/ (0,jsx_runtime_.jsxs)("span", {
                className: "info green inline",
                children: [
                    "The selected table matches ",
                    /*#__PURE__*/ jsx_runtime_.jsx("b", {
                        children: table.tableFullName
                    }),
                    " ",
                    "schema"
                ]
            }),
            dbSchemaData && /*#__PURE__*/ (0,jsx_runtime_.jsxs)("form", {
                onSubmit: (e)=>{
                    syncTableDataFormHandler({
                        e,
                        database,
                        setLoading,
                        table,
                        query
                    });
                },
                className: "w-full stack gap-2 items-stretch",
                children: [
                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
                        className: "stack gap-2 my-2",
                        children: [
                            /*#__PURE__*/ jsx_runtime_.jsx(FormRadios/* default */.Z, {
                                radioValues: [
                                    {
                                        title: "Push",
                                        payload: "Push",
                                        default: true
                                    },
                                    {
                                        title: "Pull",
                                        payload: "Pull"
                                    }, 
                                ],
                                name: "paradigm",
                                smallText: true,
                                flexRow: true,
                                onChangeHandler: (e)=>{
                                    setParadigm(e.target.value);
                                }
                            }),
                            /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                className: "text-xs text-slate-500 dark:text-slate-400",
                                children: paradigm == "Push" ? /*#__PURE__*/ (0,jsx_runtime_.jsxs)(jsx_runtime_.Fragment, {
                                    children: [
                                        "Sync data from the current table(",
                                        /*#__PURE__*/ jsx_runtime_.jsx("b", {
                                            children: table.tableFullName
                                        }),
                                        ") to the selected table below"
                                    ]
                                }) : /*#__PURE__*/ (0,jsx_runtime_.jsxs)(jsx_runtime_.Fragment, {
                                    children: [
                                        "Sync data from the selected table below to the current table(",
                                        /*#__PURE__*/ jsx_runtime_.jsx("b", {
                                            children: table.tableFullName
                                        }),
                                        ")"
                                    ]
                                })
                            })
                        ]
                    }),
                    /*#__PURE__*/ jsx_runtime_.jsx(FormSelect/* default */.Z, {
                        selectOptions: dbSchemaData.filter((dbObj)=>dbObj.dbFullName !== database.db_full_name).map((dbObj)=>({
                                title: dbObj.dbName,
                                payload: dbObj.dbSlug
                            })),
                        name: "database",
                        onChangeHandler: (e)=>{
                            const targetDatabase = dbSchemaData.find((db)=>db.dbSlug == e.target.value);
                            if (targetDatabase) {
                                setTargetDb(targetDatabase);
                                setTables(targetDatabase.tables);
                                setTargetTable(targetDatabase.tables?.[0]);
                            }
                        }
                    }),
                    /*#__PURE__*/ jsx_runtime_.jsx(FormSelect/* default */.Z, {
                        selectOptions: tables.map((tbl)=>({
                                title: tbl.tableFullName,
                                payload: tbl.tableName
                            })),
                        name: "table",
                        onChangeHandler: (e)=>{
                            const findTable = tables.find((tb)=>tb.tableName === e.target.value);
                            if (findTable) setTargetTable(findTable);
                        }
                    }),
                    /*#__PURE__*/ jsx_runtime_.jsx("button", {
                        className: isCompatible ? "" : "disabled",
                        children: "Sync"
                    })
                ]
            })
        ]
    });
}


/***/ }),

/***/ 6122:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {


// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ TableEntriesList)
});

// 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: ./components/admin/databases/UpdateEntryForm.jsx + 1 modules
var UpdateEntryForm = __webpack_require__(1985);
// EXTERNAL MODULE: ./pages/admin/[user_id]/databases/[single]/tables/[single_table]/entries/index.jsx + 1 modules
var _single_table_entries = __webpack_require__(7722);
// EXTERNAL MODULE: ./components/form/FormSelect.jsx
var FormSelect = __webpack_require__(4114);
// EXTERNAL MODULE: ./components/form/FormInput.jsx + 2 modules
var FormInput = __webpack_require__(7901);
// EXTERNAL MODULE: ./functions/frontend/fetchApi.js
var fetchApi = __webpack_require__(6729);
// EXTERNAL MODULE: ./components/general/LoadingBlock.jsx
var LoadingBlock = __webpack_require__(5264);
;// CONCATENATED MODULE: ./components/admin/databases/SearchEntriesSection.jsx
// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 






/** @type {any} */ let timeout;
/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 * ==============================================================================
 * Main Component { Functional }
 * ==============================================================================
 * @param {Object} props - Server props
 * @param {any} [props.data]
 */ function SearchEntriesSection({ data  }) {
    /**
     * Get Contexts
     *
     * @abstract { React.useContext }
     */ const { table , entries , activeEntries , setActiveEntries , confirmedDelegetedUser , database , targetField , searchTerm ,  } = external_react_default().useContext(_single_table_entries.TableEntriesContext);
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * Javascript Variables
     *
     * @abstract Non hook variables and functions
     */ const dataTypes = __webpack_require__(9594);
    const isDelegated = confirmedDelegetedUser?.delegated;
    const isTableEditable = confirmedDelegetedUser?.priviledges?.match(/Edit Tables/i);
    const isTableDeletable = confirmedDelegetedUser?.priviledges?.match(/Delete Tables/i);
    const isTableCreatable = confirmedDelegetedUser?.priviledges?.match(/Create Tables/i);
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * React Hooks
     *
     * @abstract { useState, useEffect, useRef, etc ... }
     */ const [loading, setLoading] = external_react_default().useState(false);
    /** @type {React.MutableRefObject<HTMLElement | undefined>} */ const searchInputRef = external_react_default().useRef();
    external_react_default().useEffect(()=>{
        if (searchInputRef.current) searchInputRef.current.focus();
    }, []);
    const [count, setCount] = external_react_default().useState(null);
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    function search(/** @type {string} */ term) {
        setLoading(true);
        if (activeEntries) setActiveEntries(null);
        if (!term?.toString().match(/./)) {
            setTimeout(()=>{
                if (setActiveEntries) setActiveEntries(entries || []);
                setLoading(false);
            }, 500);
            return;
        }
        window.clearTimeout(timeout);
        const targetFieldObject = table?.fields.filter((fld)=>fld.fieldName === targetField?.current);
        const operator = (()=>{
            if (targetFieldObject && targetFieldObject[0]) {
                if (targetFieldObject[0].dataType?.match(/int/i)) return "equal";
            }
            if (targetField?.current?.match(/^id$/)) return "equal";
            return "like";
        })();
        timeout = setTimeout(()=>{
            setLoading(false);
            (0,fetchApi/* default */.Z)(`/api/queryEntriesSearchTerm?db=${database?.db_full_name}&table=${table?.tableName}&field=${targetField?.current}&term=${term}&operator=${operator}`).then((res)=>{
                if (typeof res.count == "number") {
                    setCount(res.count);
                }
                if (res.success && setActiveEntries) {
                    setActiveEntries(res.result);
                }
                setLoading(false);
            });
        }, 500);
    }
    ////////////////////////////////////////
    /**
     * Function Return
     *
     * @abstract Main Function Return
     */ return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
        className: "w-full flex-col items-stretch",
        children: [
            /*#__PURE__*/ (0,jsx_runtime_.jsxs)("form", {
                onSubmit: (e)=>{
                    e.preventDefault();
                    if (searchTerm?.current) search(searchTerm.current);
                },
                className: "flex flex-row items-stretch gap-4 w-full",
                children: [
                    /*#__PURE__*/ jsx_runtime_.jsx("div", {
                        className: "max-w-xs",
                        children: /*#__PURE__*/ jsx_runtime_.jsx(FormSelect/* default */.Z, {
                            required: true,
                            selectOptions: table ? table.fields.map((fieldObject)=>{
                                return {
                                    title: fieldObject.fieldName || "",
                                    payload: fieldObject.fieldName || ""
                                };
                            }) : [],
                            name: "database_tables",
                            onChangeHandler: (e)=>{
                                if (targetField) targetField.current = e.target.value;
                            // setTimeout(() => {
                            //     search(searchTerm);
                            // }, 500);
                            },
                            title: "Select Field",
                            defaultValue: targetField?.current,
                            id: "entries-search-field-select"
                        })
                    }),
                    /*#__PURE__*/ jsx_runtime_.jsx("div", {
                        className: "grow",
                        children: /*#__PURE__*/ jsx_runtime_.jsx(FormInput/* default */.Z, {
                            title: "Search Term",
                            placeholder: "Enter search term that corresponds with the selected field type ...",
                            onInputHandler: (e)=>{
                                /** @type {HTMLInputElement} */ // @ts-ignore
                                const inputEl = e.target;
                                if (inputEl.value?.match(/./) && searchTerm) {
                                    searchTerm.current = inputEl.value;
                                } else if (searchTerm) {
                                    searchTerm.current = null;
                                }
                                search(inputEl.value);
                            },
                            elementRef: searchInputRef,
                            id: "entries-search-input"
                        })
                    }),
                    loading && /*#__PURE__*/ jsx_runtime_.jsx("div", {
                        className: "relative items-center justify-center",
                        children: /*#__PURE__*/ jsx_runtime_.jsx("div", {
                            className: "relative mt-5 w-6",
                            children: /*#__PURE__*/ jsx_runtime_.jsx(LoadingBlock/* default */.Z, {
                                width: "20px"
                            })
                        })
                    })
                ]
            }),
            searchTerm?.current?.match(/./) && /*#__PURE__*/ jsx_runtime_.jsx("div", {
                className: "py-4",
                children: /*#__PURE__*/ (0,jsx_runtime_.jsxs)("span", {
                    className: "text-lg",
                    children: [
                        typeof count == "number" ? count > 0 ? /*#__PURE__*/ (0,jsx_runtime_.jsxs)("b", {
                            children: [
                                count,
                                " "
                            ]
                        }) : /*#__PURE__*/ jsx_runtime_.jsx(jsx_runtime_.Fragment, {
                            children: "No "
                        }) : "... ",
                        "Search result",
                        !count || count === 1 ? "" : "s",
                        " for",
                        " ",
                        /*#__PURE__*/ (0,jsx_runtime_.jsxs)("b", {
                            children: [
                                '"',
                                searchTerm.current,
                                '"'
                            ]
                        })
                    ]
                })
            })
        ]
    });
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
} /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */ 

// EXTERNAL MODULE: external "@mui/icons-material/LibraryAddTwoTone"
var LibraryAddTwoTone_ = __webpack_require__(9438);
var LibraryAddTwoTone_default = /*#__PURE__*/__webpack_require__.n(LibraryAddTwoTone_);
// EXTERNAL MODULE: ./components/admin/databases/ImportExportEntries.jsx + 1 modules
var ImportExportEntries = __webpack_require__(2943);
// EXTERNAL MODULE: ./components/admin/databases/MoreTableOptions.jsx
var MoreTableOptions = __webpack_require__(3684);
// EXTERNAL MODULE: ./components/admin/databases/SyncDataButton.jsx + 1 modules
var SyncDataButton = __webpack_require__(436);
;// CONCATENATED MODULE: ./components/admin/databases/TableEntriesList.jsx
// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 










/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 * ==============================================================================
 * Main Component { Functional }
 * ==============================================================================
 * @param {Object} props - Server props
 * @param {import("@/package-shared/types").UserType} props.user
 * @param {any[] | null} props.entries
 * @param {import("@/package-shared/types").DSQL_MYSQL_user_databases_Type} props.database
 * @param {import("@/package-shared/types").DSQL_TableSchemaType} props.table
 * @param {React.Dispatch<React.SetStateAction<any>>} [props.setTargetEntry]
 * @param {import("@/package-shared/types").DSQL_DatabaseSchemaType[]} props.dbSchemaData
 * @param {React.MutableRefObject<import("@/package-shared/types").RichTextEditorsRefArray[]>} props.richTextEditors
 * @param {React.MutableRefObject<import("@/package-shared/types").JSONTextEditorsRefArray[]>} props.jsonTextEditors
 * @param {any[]} props.dataTypes
 * @param {string} [props.title]
 * @param {any} [props.confirmedDelegetedUser]
 * @param {any} [props.query]
 * @param {any} [props.search]
 * @param {number} [props.entriesCount]
 */ function TableEntriesList({ user , entries , database , table , setTargetEntry , dbSchemaData , richTextEditors , jsonTextEditors , dataTypes , title , confirmedDelegetedUser , query , search , entriesCount ,  }) {
    /**
     * Get Contexts
     *
     * @abstract { React.useContext }
     */ ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * Javascript Variables
     *
     * @abstract Non hook variables and functions
     */ const isDelegated = confirmedDelegetedUser?.delegated;
    const isTableEditable = confirmedDelegetedUser?.priviledges?.match(/Edit Tables/i);
    const isTableDeletable = confirmedDelegetedUser?.priviledges?.match(/Delete Tables/i);
    const isTableCreatable = confirmedDelegetedUser?.priviledges?.match(/Create Tables/i);
    const areEntriesEditable = confirmedDelegetedUser?.priviledges?.match(/Edit Entries/i);
    const areEntriesDeletable = confirmedDelegetedUser?.priviledges?.match(/Delete Entries/i);
    const { active_clone , active_clone_parent_db , remote_connected  } = database;
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * React Hooks
     *
     * @abstract { useState, useEffect, useRef, etc ... }
     */ ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * Function Return
     *
     * @abstract Main Function Return
     */ return /*#__PURE__*/ jsx_runtime_.jsx((external_react_default()).Fragment, {
        children: /*#__PURE__*/ (0,jsx_runtime_.jsxs)("section", {
            className: "paper gray gray-bg",
            children: [
                title && /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
                    className: "justify-between w-full flex-wrap px-4 sm:px-0 pt-4 sm:pt-0",
                    children: [
                        /*#__PURE__*/ jsx_runtime_.jsx("h2", {
                            className: "text-xl m-0",
                            children: title
                        }),
                        /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
                            children: [
                                /*#__PURE__*/ (0,jsx_runtime_.jsxs)("a", {
                                    className: "button flex gap-2 items-center",
                                    href: `/admin/${user?.id}/databases/${database.db_slug}/tables/${table.tableName}/entries/add-entry`,
                                    children: [
                                        /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                            className: "symbol",
                                            children: "+"
                                        }),
                                        /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                            children: "Add New Entry"
                                        })
                                    ]
                                }),
                                /*#__PURE__*/ jsx_runtime_.jsx(ImportExportEntries/* default */.Z, {
                                    database,
                                    table
                                }),
                                /*#__PURE__*/ jsx_runtime_.jsx(MoreTableOptions/* default */.Z, {
                                    database,
                                    table,
                                    dbSchemaData,
                                    query
                                })
                            ]
                        })
                    ]
                }),
                search && /*#__PURE__*/ jsx_runtime_.jsx(SearchEntriesSection, {}),
                /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
                    className: "w-full flex-col gap-6",
                    children: [
                        entries?.[0] && entries.map((entry)=>{
                            return /*#__PURE__*/ jsx_runtime_.jsx((external_react_default()).Fragment, {
                                children: /*#__PURE__*/ jsx_runtime_.jsx(UpdateEntryForm/* default */.Z, {
                                    user: user,
                                    database: database,
                                    table: table,
                                    dbSchemaData: dbSchemaData,
                                    richTextEditors: richTextEditors,
                                    dataTypes: dataTypes,
                                    entry: entry,
                                    query: query,
                                    confirmedDelegetedUser: confirmedDelegetedUser,
                                    jsonTextEditors: jsonTextEditors
                                })
                            }, entry.id);
                        }),
                        !entries && /*#__PURE__*/ jsx_runtime_.jsx("div", {
                            className: "w-full h-[300px]",
                            children: /*#__PURE__*/ jsx_runtime_.jsx(LoadingBlock/* default */.Z, {
                                position: "relative"
                            })
                        }),
                        entries && !entries?.[0] && /*#__PURE__*/ (0,jsx_runtime_.jsxs)("a", {
                            href: `/admin/${user?.id}/databases/${database.db_slug}/tables/${table.tableName}/entries/add-entry`,
                            className: "border-dotted border-slate-200 border-2 p-4 w-full flex-col rounded flex items-center hover:border-primary/50 gap-2",
                            children: [
                                /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                    className: "text-slate-400 text-center",
                                    children: "No Entries Added Yet."
                                }),
                                /*#__PURE__*/ jsx_runtime_.jsx((LibraryAddTwoTone_default()), {
                                    className: "opacity-20 my-4",
                                    sx: {
                                        fontSize: 80
                                    }
                                }),
                                /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                    className: "text-center",
                                    children: "Add an Entry to this Table"
                                })
                            ]
                        }),
                        entriesCount && entriesCount > 10 ? /*#__PURE__*/ jsx_runtime_.jsx("a", {
                            href: `/admin/${user?.id}/databases/${database.db_slug}/tables/${table.tableName}/entries`,
                            className: "button outlined gray w-full -mb-4",
                            children: /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                children: "See All Entries"
                            })
                        }) : null,
                        entries?.[0] && title && /*#__PURE__*/ (0,jsx_runtime_.jsxs)("a", {
                            className: "button flex gap-2 items-center w-full justify-center mt-2 more-padding",
                            href: `/admin/${user?.id}/databases/${database.db_slug}/tables/${table.tableName}/entries/add-entry`,
                            style: {
                                borderStyle: "dotted",
                                borderWidth: "2px"
                            },
                            children: [
                                /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                    className: "symbol",
                                    children: "+"
                                }),
                                /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                    children: "Add New Entry"
                                })
                            ]
                        })
                    ]
                })
            ]
        })
    });
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
} /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */ 


/***/ }),

/***/ 1985:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {


// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ UpdateEntryForm)
});

// 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: ./functions/frontend/defaultFieldsRegexp.js
var defaultFieldsRegexp = __webpack_require__(3907);
// EXTERNAL MODULE: ./functions/frontend/fetchApi.js
var fetchApi = __webpack_require__(6729);
// EXTERNAL MODULE: ./functions/frontend/updateDiskUsage.js
var updateDiskUsage = __webpack_require__(1069);
// EXTERNAL MODULE: ./components/general/ExpandBlock.jsx
var ExpandBlock = __webpack_require__(6169);
// EXTERNAL MODULE: ./components/general/LoadingBlock.jsx
var LoadingBlock = __webpack_require__(5264);
// EXTERNAL MODULE: ./components/admin/databases/TableEntryField.jsx + 11 modules
var TableEntryField = __webpack_require__(4559);
// EXTERNAL MODULE: external "@mui/material"
var material_ = __webpack_require__(5692);
// EXTERNAL MODULE: external "@mui/icons-material/MoreHoriz"
var MoreHoriz_ = __webpack_require__(5453);
// EXTERNAL MODULE: external "lodash"
var external_lodash_ = __webpack_require__(6517);
var external_lodash_default = /*#__PURE__*/__webpack_require__.n(external_lodash_);
// EXTERNAL MODULE: external "lucide-react"
var external_lucide_react_ = __webpack_require__(2423);
// EXTERNAL MODULE: ./components/admin/databases/functions/generateTypeDefinition.js
var generateTypeDefinition = __webpack_require__(5753);
// EXTERNAL MODULE: external "react-tiny-popover"
var external_react_tiny_popover_ = __webpack_require__(7076);
;// CONCATENATED MODULE: ./components/admin/databases/UpdateEntryMoreOptions.jsx
// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 





/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 * ==============================================================================
 * Main Component { Functional }
 * ==============================================================================
 * @param {Object} props - Server props
 * @param {import("@/package-shared/types").UserType} props.user
 * @param {import("@/package-shared/types").DSQL_TableSchemaType} props.table
 * @param {any} [props.entry]
 * @param {string} [props.url]
 * @param {any} [props.query]
 */ function UpdateEntryMoreOptions({ user , table , entry , url , query ,  }) {
    /**
     * Get Contexts
     *
     * @abstract { React.useContext }
     */ ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * Javascript Variables
     *
     * @abstract Non hook variables and functions
     */ ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * React Hooks
     *
     * @abstract { useState, useEffect, useRef, etc ... }
     */ const [openMore, setOpenMore] = external_react_default().useState(false);
    const openMoreButtonRef = external_react_default().useRef(null);
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * Function Return
     *
     * @abstract Main Function Return
     */ return /*#__PURE__*/ jsx_runtime_.jsx("div", {
        className: "relative z-[1000]",
        children: /*#__PURE__*/ jsx_runtime_.jsx(external_react_tiny_popover_.Popover, {
            isOpen: openMore,
            onClickOutside: ()=>setOpenMore(false),
            containerClassName: "z-[1000]",
            positions: [
                "bottom"
            ],
            align: "end",
            content: /*#__PURE__*/ jsx_runtime_.jsx("div", {
                className: "bg-white dark:bg-slate-900 rounded shadow-md cancel-link",
                children: /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
                    className: "flex-col min-w-[200px] items-stretch gap-0",
                    children: [
                        /*#__PURE__*/ jsx_runtime_.jsx("button", {
                            className: "plain-text justify-start py-3",
                            onClick: ()=>{
                                navigator.clipboard.writeText(JSON.stringify(entry)).then(()=>{
                                    window.alert("Post Copied");
                                    setOpenMore(false);
                                });
                            },
                            children: "Copy Object"
                        }),
                        /*#__PURE__*/ jsx_runtime_.jsx("hr", {
                            className: "m-0"
                        }),
                        /*#__PURE__*/ jsx_runtime_.jsx("button", {
                            className: "plain-text justify-start py-3",
                            onClick: ()=>{
                                const txt = (0,generateTypeDefinition/* default */.Z)({
                                    paradigm: "JavaScript",
                                    table,
                                    query,
                                    user
                                });
                                navigator.clipboard.writeText(txt || "").then(()=>{
                                    window.alert("JavaScript Type Definition Copied");
                                    setOpenMore(false);
                                });
                            },
                            children: "Copy JS Type Definition"
                        }),
                        /*#__PURE__*/ jsx_runtime_.jsx("hr", {
                            className: "m-0"
                        }),
                        /*#__PURE__*/ jsx_runtime_.jsx("button", {
                            className: "plain-text justify-start py-3",
                            onClick: ()=>{
                                const txt = (0,generateTypeDefinition/* default */.Z)({
                                    paradigm: "TypeScript",
                                    table,
                                    query,
                                    user
                                });
                                navigator.clipboard.writeText(txt || "").then(()=>{
                                    window.alert("TypeScript Type Definition Copied");
                                    setOpenMore(false);
                                });
                            },
                            children: "Copy TS Type Definition"
                        }),
                        /*#__PURE__*/ jsx_runtime_.jsx("hr", {
                            className: "m-0"
                        }),
                        /*#__PURE__*/ jsx_runtime_.jsx("a", {
                            href: url,
                            className: "button plain-text justify-start py-3",
                            children: /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                children: "View Entry"
                            })
                        })
                    ]
                })
            }),
            children: /*#__PURE__*/ jsx_runtime_.jsx("button", {
                onClick: ()=>{
                    setOpenMore(!openMore);
                },
                ref: openMoreButtonRef,
                className: "ghost p-2",
                children: /*#__PURE__*/ jsx_runtime_.jsx(external_lucide_react_.Ellipsis, {})
            })
        })
    });
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
} /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */ 

;// CONCATENATED MODULE: ./components/admin/databases/UpdateEntryForm.jsx
// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 













/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 * ==============================================================================
 * 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 {React.MutableRefObject<any[]>} props.richTextEditors
 * @param {React.MutableRefObject<any[]>} props.jsonTextEditors
 * @param {any[]} props.dataTypes
 * @param {any} [props.entry]
 * @param {boolean} [props.entryPage]
 * @param {any} [props.confirmedDelegetedUser]
 * @param {any} [props.query]
 */ function UpdateEntryForm({ user , database , table , dbSchemaData , richTextEditors , jsonTextEditors , dataTypes , entry , entryPage , confirmedDelegetedUser , query ,  }) {
    /**
     * Get Contexts
     *
     * @abstract { React.useContext }
     */ ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * Javascript Variables
     *
     * @abstract Non hook variables and functions
     */ const filteredFields = table.fields.filter((field)=>field.fieldName && !field.fieldName.match(defaultFieldsRegexp/* default */.Z));
    const isUUID = table.fields.find((field)=>field.fieldName === "uuid");
    const isDelegated = confirmedDelegetedUser?.delegated;
    const isTableEditable = confirmedDelegetedUser?.priviledges?.match(/Edit Tables/i);
    const isTableDeletable = confirmedDelegetedUser?.priviledges?.match(/Delete Tables/i);
    const isTableCreatable = confirmedDelegetedUser?.priviledges?.match(/Create Tables/i);
    const areEntriesEditable = confirmedDelegetedUser?.priviledges?.match(/Edit Entries/i);
    const areEntriesDeletable = confirmedDelegetedUser?.priviledges?.match(/Delete Entries/i);
    ////////////////////////////////////////
    if (isUUID) {
        filteredFields.unshift({
            dataType: "UUID",
            fieldName: "uuid",
            defaultField: true
        });
    }
    filteredFields.unshift({
        dataType: "BIGINT",
        fieldName: "id",
        defaultField: true
    });
    filteredFields.push({
        dataType: "VARCHAR(250)",
        fieldName: "date_created",
        defaultField: true
    });
    filteredFields.push({
        dataType: "BIGINT",
        fieldName: "date_created_code",
        defaultField: true
    });
    filteredFields.push({
        dataType: "TIMESTAMP",
        fieldName: "date_created_timestamp",
        defaultField: true
    });
    filteredFields.push({
        dataType: "VARCHAR(250)",
        fieldName: "date_updated",
        defaultField: true
    });
    filteredFields.push({
        dataType: "BIGINT",
        fieldName: "date_updated_code",
        defaultField: true
    });
    filteredFields.push({
        dataType: "TIMESTAMP",
        fieldName: "date_updated_timestamp",
        defaultField: true
    });
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * React Hooks
     *
     * @abstract { useState, useEffect, useRef, etc ... }
     */ const [loading, setLoading] = external_react_default().useState(false);
    const [collapse, setCollapse] = external_react_default().useState(true);
    const [activeEntry, setActiveEntry] = external_react_default().useState(entry);
    const [openMore, setOpenMore] = external_react_default().useState(false);
    const openMoreButtonRef = external_react_default().useRef(null);
    /** @type {React.MutableRefObject<import("@/package-shared/types").RichTextEditorsRefArray[]>} */ const currentRichTextEditorForms = external_react_default().useRef([]);
    const [url, setUrl] = external_react_default().useState(`/admin/${user?.id}/databases/${database.db_slug}/tables/${table.tableName}/entries/${activeEntry.id}`);
    external_react_default().useEffect(()=>{
        if (confirmedDelegetedUser?.dbUserId && Number(user.id) !== Number(confirmedDelegetedUser.dbUserId)) {
            setUrl(`/admin/${user?.id}/databases/${database.db_slug}/tables/${table.tableName}/entries/${activeEntry.id}` + window.location.search);
        }
    }, []);
    const formButtonId = `${database.db_slug}-${table.tableName}-${activeEntry.id}-submit-button`;
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * Function Return
     *
     * @abstract Main Function Return
     */ return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
        className: "card col w-full overflow-hidden",
        children: [
            /*#__PURE__*/ jsx_runtime_.jsx("a", {
                href: url,
                onClick: (e)=>{
                    /** @type {HTMLElement} */ // @ts-ignore
                    const targetEl = e.target;
                    if (targetEl.closest(".cancel-link") || targetEl.closest(".MuiPopover-root")) {
                        e.preventDefault();
                    }
                },
                className: "w-full",
                children: /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
                    className: "w-full bg-slate-700 text-white py-2 px-4 rounded justify-between flex-wrap hover:bg-slate-800 cursor-pointer relative z-[1000] ",
                    onClick: (e)=>{
                        /** @type {HTMLDivElement} */ // @ts-ignore
                        const divEl = e.target;
                        if (divEl.closest(".cancel-link") || divEl.closest(".MuiPopover-root")) return;
                        if (e.ctrlKey) {
                            window.open(url, "__blank");
                        } else {
                            window.location.href = url;
                        }
                    },
                    children: [
                        /*#__PURE__*/ (0,jsx_runtime_.jsxs)("span", {
                            children: [
                                "Entry #",
                                activeEntry.id
                            ]
                        }),
                        /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
                            className: "flex-wrap cancel-link",
                            children: [
                                (!isDelegated || isDelegated && areEntriesDeletable) && /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                    className: "text-slate-300 hover:text-fuchsia-200 cursor-pointer" + (loading ? " pointer-events-none opacity-40" : ""),
                                    onClick: (e)=>{
                                        if (window.confirm(`Delete Entry #${activeEntry.id}?`)) {
                                            setLoading(true);
                                            (0,fetchApi/* default */.Z)("/api/deleteTableEntry" + window.location.search, {
                                                method: "post",
                                                body: {
                                                    dbFullName: database.db_full_name,
                                                    tableName: table.tableName,
                                                    entryId: activeEntry.id,
                                                    dbSlug: database.db_slug,
                                                    dbId: database.id,
                                                    delegated: query?.delegated,
                                                    confirmedDelegetedUser
                                                }
                                            }, true).then((res)=>{
                                                if (res.success) {
                                                    (0,updateDiskUsage/* default */.Z)().then(()=>{
                                                        window.location.reload();
                                                    });
                                                } else {
                                                    window.alert(res.msg);
                                                    setTimeout(()=>{
                                                        setLoading(false);
                                                    }, 500);
                                                }
                                            });
                                        }
                                    },
                                    children: "Delete Entry"
                                }),
                                !entryPage && /*#__PURE__*/ (0,jsx_runtime_.jsxs)((external_react_default()).Fragment, {
                                    children: [
                                        /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                            className: "opacity-20",
                                            children: "|"
                                        }),
                                        /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                            className: "text-slate-300 hover:text-fuchsia-200 cursor-pointer",
                                            onClick: (e)=>{
                                                if (collapse) {
                                                    setCollapse(false);
                                                } else {
                                                    setCollapse(true);
                                                }
                                            },
                                            children: collapse ? /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                                children: "Expand"
                                            }) : /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                                children: "Collapse"
                                            })
                                        })
                                    ]
                                }),
                                /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                    className: "opacity-20",
                                    children: "|"
                                }),
                                /*#__PURE__*/ jsx_runtime_.jsx("div", {
                                    className: "button ghost px-0",
                                    onClick: (e)=>{
                                        let duplicateEntry = external_lodash_default().cloneDeep(entry);
                                        delete duplicateEntry["date_created"];
                                        delete duplicateEntry["date_created_code"];
                                        delete duplicateEntry["date_created_timestamp"];
                                        delete duplicateEntry["date_updated"];
                                        delete duplicateEntry["date_updated_code"];
                                        delete duplicateEntry["date_updated_timestamp"];
                                        delete duplicateEntry["id"];
                                        delete duplicateEntry["uuid"];
                                        localStorage.setItem("duplicate_entry", JSON.stringify(duplicateEntry));
                                        window.location.href = `/admin/${user?.id}/databases/${database.db_slug}/tables/${table.tableName}/entries/add-entry?duplicate=true&id=${entry.id}`;
                                    },
                                    children: /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                        className: "text-slate-300",
                                        children: "Duplicate"
                                    })
                                }),
                                /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                    className: "opacity-20",
                                    children: "|"
                                }),
                                /*#__PURE__*/ jsx_runtime_.jsx(UpdateEntryMoreOptions, {
                                    table,
                                    user,
                                    entry,
                                    query,
                                    url
                                })
                            ]
                        })
                    ]
                })
            }),
            /*#__PURE__*/ (0,jsx_runtime_.jsxs)("form", {
                className: "w-full flex flex-col items-stretch gap-8 minimal-scrollbars relative",
                style: !entryPage ? {
                    maxHeight: collapse ? "300px" : "none",
                    paddingTop: "10px",
                    paddingBottom: "10px",
                    overflow: "hidden"
                } : {},
                onSubmit: (e)=>{
                    e.preventDefault();
                    setLoading(true);
                    /** @type {any} */ let payload = {};
                    /** @type {HTMLFormElement} */ // @ts-ignore
                    const formEl = e.target;
                    filteredFields.forEach((field)=>{
                        if (!field.fieldName) return;
                        if (!formEl[field.fieldName]) return;
                        const isString = typeof formEl[field.fieldName].value !== "string";
                        const isNumber = typeof formEl[field.fieldName].value !== "number";
                        if (!isString && !isNumber && !formEl[field.fieldName].value) return;
                        if (formEl[field.fieldName]?.dataset.default) return;
                        payload[field.fieldName] = formEl[field.fieldName].value;
                    });
                    if (currentRichTextEditorForms.current[0]) {
                        currentRichTextEditorForms.current.forEach((/** @type {any} */ richTextObject)=>{
                            if (!richTextObject?.fieldName || !richTextObject?.ref?.current) return;
                            payload[richTextObject.fieldName] = richTextObject.ref.current.getContent();
                        });
                    }
                    if (jsonTextEditors.current[0]) {
                        jsonTextEditors.current.forEach((jsonEditor)=>{
                            if (!jsonEditor?.fieldName || !jsonEditor?.ref?.current) return;
                            payload[jsonEditor.fieldName] = jsonEditor.ref.current.getValue();
                        });
                    }
                    (0,fetchApi/* default */.Z)("/api/updateTableEntry", {
                        method: "post",
                        body: {
                            dbFullName: database.db_full_name,
                            dbSlug: database.db_slug,
                            dbId: database.id,
                            tableName: table.tableName,
                            entryId: activeEntry.id,
                            payload: payload,
                            tableSchema: table,
                            delegated: query?.delegated,
                            confirmedDelegetedUser
                        }
                    }, true).then((res)=>{
                        if (res.success) {
                            (0,fetchApi/* default */.Z)(`/api/refreshEntry?table=${table.tableName}&db=${database.db_full_name}&id=${activeEntry.id}&schema=${JSON.stringify(table)}`).then((_res)=>{
                                if (_res.success) {
                                    setActiveEntry(_res.entry);
                                    setTimeout(()=>{
                                        setLoading(false);
                                    }, 500);
                                }
                            });
                        } else {
                            window.alert(res.msg + "\n" + (res.err || ""));
                            setTimeout(()=>{
                                setLoading(false);
                            }, 500);
                        }
                    });
                },
                onKeyUp: (e)=>{
                    if (e.ctrlKey && e.key == "Enter") {
                        const confirm = window.confirm("Update this Form?");
                        if (!confirm) return;
                        document.getElementById(formButtonId)?.click();
                    }
                },
                children: [
                    loading && /*#__PURE__*/ jsx_runtime_.jsx(LoadingBlock/* default */.Z, {}),
                    (collapse && !entryPage ? filteredFields.slice(0, 3) : filteredFields).map((field, index)=>{
                        let dataTypeSchema = dataTypes.filter((type)=>type.name === field.dataType?.replace(/\d|\(|\)/g, ""));
                        return /*#__PURE__*/ jsx_runtime_.jsx(TableEntryField/* default */.Z, {
                            fieldObject: field,
                            dataTypeSchema: dataTypeSchema[0],
                            richTextEditors: richTextEditors,
                            currentRichTextEditorForms: currentRichTextEditorForms,
                            entry: activeEntry,
                            query: query,
                            entryPage: entryPage,
                            confirmedDelegetedUser: confirmedDelegetedUser,
                            jsonTextEditors: jsonTextEditors,
                            formButtonId: formButtonId
                        }, index + 1);
                    }),
                    /*#__PURE__*/ jsx_runtime_.jsx("button", {
                        type: "submit",
                        className: "" + (loading ? " pointer-events-none opacity-40" : ""),
                        id: formButtonId,
                        children: "Update Entry"
                    })
                ]
            }),
            !entryPage && /*#__PURE__*/ jsx_runtime_.jsx(ExpandBlock/* default */.Z, {
                collapse: collapse,
                setCollapse: setCollapse
            })
        ]
    });
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
} /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */ 


/***/ }),

/***/ 2348:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (/* binding */ FormRadios)
/* harmony export */ });
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(997);
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6689);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 

/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 * ==============================================================================
 * Main Component { Functional }
 * ==============================================================================
 * @param {Object} props - Server props
 * @param {{
 *  title: string,
 *  payload: string | boolean,
 *  default?: boolean,
 *  jsx?: React.ReactNode,
 *  onChangeHandler?: (e: any) => void,
 * }[]} props.radioValues - array of objects
 * @param {string} props.name - form radios collective name
 * @param {(e: any) => void} [props.onChangeHandler] - when radios change
 * @param {React.Dispatch<React.SetStateAction<any>>} [props.setAlert] - set an external alert dispatch
 * @param {boolean} [props.flexRow] - if the radio and label are stacked on each other or side-by-side
 * @param {string} [props.labelColor] - Label color using tailwind syntax
 * @param {boolean} [props.baseText] - Font size regular
 * @param {boolean} [props.smallText] - Font size smaller
 * @param {string} [props.className] - Additional class names for the wrapper
 */ function FormRadios({ radioValues , name , onChangeHandler , setAlert , flexRow , labelColor , baseText , smallText , className ,  }) {
    try {
        /**
         * Get Contexts
         *
         * @abstract { React.useContext }
         */ ////////////////////////////////////////
        ////////////////////////////////////////
        ////////////////////////////////////////
        /**
         * Javascript Variables
         *
         * @abstract Non hook variables and functions
         */ ////////////////////////////////////////
        ////////////////////////////////////////
        ////////////////////////////////////////
        /**
         * React Hooks
         *
         * @abstract { useState, useEffect, useRef, etc ... }
         */ ////////////////////////////////////////
        ////////////////////////////////////////
        ////////////////////////////////////////
        /**
         * Function Return
         *
         * @abstract Main Function Return
         */ return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
            className: "flex items-start gap-4 flex-wrap " + (flexRow ? "" : " flex-col ") + (className ? className : ""),
            children: radioValues.map((value, index)=>{
                const { payload , title , jsx  } = value;
                const radioPayload = payload === false ? payload : payload ? payload : title ? title : null;
                return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
                    className: "flex items-center gap-2",
                    children: [
                        /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("input", {
                            className: "m-0" + (baseText ? " w-5 h-5" : smallText ? " w-4 h-4" : " w-6 h-6"),
                            type: "radio",
                            defaultChecked: value.default ? true : false,
                            name: name,
                            id: name + "_" + radioPayload,
                            onChange: (e)=>{
                                if (setAlert) setAlert(null);
                                if (value.onChangeHandler) {
                                    value.onChangeHandler(e);
                                } else if (onChangeHandler) {
                                    onChangeHandler(e);
                                }
                            },
                            value: typeof radioPayload == "string" ? radioPayload : undefined
                        }),
                        jsx ? jsx : /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("label", {
                            htmlFor: name + "_" + radioPayload,
                            className: "text-lg m-0 " + (labelColor ? labelColor : "text-slate-800") + (baseText ? " text-base" : smallText ? " text-sm" : " text-lg"),
                            children: title
                        })
                    ]
                }, index + 1);
            })
        });
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    } catch (error) {
        console.log("ERROR in FormRadio =>", error);
        return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
            children: "Form Radio Error"
        });
    }
} /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */  /** ****************************************************************************** */ 


/***/ }),

/***/ 7722:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "TableEntriesContext": () => (/* binding */ TableEntriesContext),
  "default": () => (/* binding */ TableEntries),
  "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: ./functions/backend/userAuth.js
var userAuth = __webpack_require__(370);
var userAuth_default = /*#__PURE__*/__webpack_require__.n(userAuth);
// EXTERNAL MODULE: ./layouts/AdminLayout.jsx + 2 modules
var AdminLayout = __webpack_require__(4858);
// EXTERNAL MODULE: ./components/general/BackButton.jsx
var BackButton = __webpack_require__(1781);
// EXTERNAL MODULE: ./components/general/Breadcrumbs.jsx
var Breadcrumbs = __webpack_require__(424);
// EXTERNAL MODULE: ./components/general/CopySlug.jsx
var CopySlug = __webpack_require__(9230);
// EXTERNAL MODULE: ./components/admin/databases/TableEntriesList.jsx + 1 modules
var TableEntriesList = __webpack_require__(6122);
// EXTERNAL MODULE: ./components/general/ActiveCloneDbBanner.jsx
var ActiveCloneDbBanner = __webpack_require__(4986);
// EXTERNAL MODULE: ./components/general/ActiveCloneTableBanner.jsx
var ActiveCloneTableBanner = __webpack_require__(8515);
// EXTERNAL MODULE: ./components/admin/databases/DatabasesTablesList.jsx
var DatabasesTablesList = __webpack_require__(8264);
// EXTERNAL MODULE: ./components/general/LoadingBlock.jsx
var LoadingBlock = __webpack_require__(5264);
// EXTERNAL MODULE: ./functions/frontend/fetchApi.js
var fetchApi = __webpack_require__(6729);
// EXTERNAL MODULE: external "lodash"
var external_lodash_ = __webpack_require__(6517);
// EXTERNAL MODULE: ./components/admin/databases/ImportExportEntries.jsx + 1 modules
var ImportExportEntries = __webpack_require__(2943);
// EXTERNAL MODULE: ./components/admin/databases/MoreTableOptions.jsx
var MoreTableOptions = __webpack_require__(3684);
;// CONCATENATED MODULE: ./components/admin/databases/TableEntriesContent.jsx
// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 














/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ const BATCH_NO = 20;
/** @type {any} */ let refreshTimeout;
/**
 * ==============================================================================
 * Main Component { Functional }
 * ==============================================================================
 * @param {Object} props - Server props
 */ function TableEntriesContent(props) {
    /**
     * Get Contexts
     *
     * @abstract { React.useContext }
     */ const { user , database , table , dbSchemaData , setTargetEntry , richTextEditors , jsonTextEditors , query , confirmedDelegetedUser , activeEntries , entriesCount , setActiveEntries ,  } = external_react_default().useContext(TableEntriesContext);
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * Javascript Variables
     *
     * @abstract Non hook variables and functions
     */ const dataTypes = __webpack_require__(9594);
    const isDelegated = confirmedDelegetedUser?.delegated;
    const isTableEditable = confirmedDelegetedUser?.priviledges?.match(/Edit Tables/i);
    const isTableDeletable = confirmedDelegetedUser?.priviledges?.match(/Delete Tables/i);
    const isTableCreatable = confirmedDelegetedUser?.priviledges?.match(/Create Tables/i);
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * React Hooks
     *
     * @abstract { useState, useEffect, useRef, etc ... }
     */ ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * 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 relative z-50",
                children: [
                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
                        className: "w-full justify-between flex-wrap",
                        children: [
                            /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
                                className: "flex-wrap",
                                children: [
                                    /*#__PURE__*/ jsx_runtime_.jsx(BackButton/* default */.Z, {}),
                                    /*#__PURE__*/ jsx_runtime_.jsx("h1", {
                                        className: "text-3xl m-0",
                                        children: /*#__PURE__*/ (0,jsx_runtime_.jsxs)("span", {
                                            className: "flex items-center flex-wrap gap-2",
                                            children: [
                                                "All Entries In",
                                                " ",
                                                /*#__PURE__*/ (0,jsx_runtime_.jsxs)("span", {
                                                    className: "bg-slate-100 dark:bg-slate-800 px-2 py-1 border border-solid border-slate-400 dark:border-slate-600 rounded relative",
                                                    children: [
                                                        table.tableFullName,
                                                        /*#__PURE__*/ jsx_runtime_.jsx("div", {
                                                            className: "absolute -top-5 -right-4",
                                                            children: /*#__PURE__*/ jsx_runtime_.jsx(CopySlug/* default */.Z, {
                                                                slugText: table.tableName,
                                                                justIcon: true
                                                            })
                                                        })
                                                    ]
                                                }),
                                                " ",
                                                "Table"
                                            ]
                                        })
                                    })
                                ]
                            }),
                            /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
                                className: "w-full sm:w-auto",
                                children: [
                                    /*#__PURE__*/ (0,jsx_runtime_.jsxs)("a", {
                                        href: `/admin/${user?.id}/databases/${database.db_slug}/tables/${table.tableName}/entries/add-entry`,
                                        className: "button flex items-center gap-2 w-full sm:w-auto justify-center",
                                        children: [
                                            /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                                className: "symbol",
                                                children: "+"
                                            }),
                                            /*#__PURE__*/ jsx_runtime_.jsx("span", {
                                                children: "Add New Entry"
                                            })
                                        ]
                                    }),
                                    /*#__PURE__*/ jsx_runtime_.jsx(ImportExportEntries/* default */.Z, {
                                        database,
                                        table
                                    }),
                                    /*#__PURE__*/ jsx_runtime_.jsx(MoreTableOptions/* default */.Z, {
                                        database,
                                        table,
                                        dbSchemaData,
                                        query
                                    })
                                ]
                            })
                        ]
                    }),
                    /*#__PURE__*/ jsx_runtime_.jsx(Breadcrumbs/* default */.Z, {
                        confirmedDelegetedUser: query?.delegated,
                        user: user
                    })
                ]
            }),
            database.active_clone ? /*#__PURE__*/ jsx_runtime_.jsx(ActiveCloneDbBanner/* default */.Z, {
                database: database,
                user: user
            }) : /*#__PURE__*/ jsx_runtime_.jsx(jsx_runtime_.Fragment, {}),
            database.remote_connected ? /*#__PURE__*/ jsx_runtime_.jsx(DatabasesTablesList/* ConnectedDatabaseBanner */.w, {
                database: database
            }) : /*#__PURE__*/ jsx_runtime_.jsx(jsx_runtime_.Fragment, {}),
            /*#__PURE__*/ jsx_runtime_.jsx(ActiveCloneTableBanner/* default */.Z, {
                table: table,
                database: database,
                user: user
            }),
            /*#__PURE__*/ jsx_runtime_.jsx(TableEntriesList/* default */.Z, {
                user: user,
                entries: activeEntries,
                database: database,
                table: table,
                setTargetEntry: setTargetEntry,
                dbSchemaData: dbSchemaData,
                richTextEditors: richTextEditors,
                dataTypes: dataTypes,
                query: query,
                confirmedDelegetedUser: confirmedDelegetedUser,
                jsonTextEditors: jsonTextEditors,
                search: true
            }),
            entriesCount > BATCH_NO && /*#__PURE__*/ jsx_runtime_.jsx(InfiniteScroll, {
                activeEntries,
                setActiveEntries,
                database,
                table,
                entriesCount
            })
        ]
    });
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 *
 * @param {object} props
 * @param {any[] | null} props.activeEntries
 * @param {React.Dispatch<React.SetStateAction<any[] | null>>} props.setActiveEntries
 * @param {import("@/package-shared/types").DSQL_MYSQL_user_databases_Type} props.database
 * @param {import("@/package-shared/types").DSQL_TableSchemaType} props.table
 * @param {number} props.entriesCount
 * @returns
 */ function InfiniteScroll({ activeEntries , setActiveEntries , database , table , entriesCount ,  }) {
    const context = external_react_default().useContext(TableEntriesContext);
    /** @type {React.RefObject<HTMLDivElement>} */ // @ts-ignore
    const infiniteScrollRef = external_react_default().useRef();
    const pageRef = external_react_default().useRef(1);
    const totalEntriesDisplayed = BATCH_NO * Number(pageRef.current);
    const exhausted = Boolean(totalEntriesDisplayed >= entriesCount);
    external_react_default().useEffect(()=>{
        /** @type {IntersectionObserverCallback} */ function ISObserverCb(entries, observer) {
            if (entries?.[0]?.isIntersecting) {
                /** @type {HTMLInputElement | null} */ // @ts-ignore
                const searchInput = document.getElementById("entries-search-input");
                /** @type {HTMLInputElement | null} */ // @ts-ignore
                const searchField = document.getElementById("entries-search-field-select");
                /** @type {import("@/pages/api/infiniteScroll").InfiniteScrollBodyObject} */ const fetchObject = {
                    tableName: table.tableName,
                    dbName: database.db_slug,
                    page: pageRef.current,
                    tableSchema: table,
                    search: searchInput ? searchInput.value : undefined,
                    searchField: searchField ? searchField.value : undefined,
                    delegated: Boolean(context.query.delegated)
                };
                (0,fetchApi/* default */.Z)("/api/infiniteScroll", {
                    method: "POST",
                    body: fetchObject
                }, true).then((/** @type {import("@/pages/api/infiniteScroll").InfiniteScrollAPIRes} */ res)=>{
                    if (!res.success) {
                        return;
                    }
                    if (res.page) {
                        pageRef.current = res.page;
                    }
                    window.clearTimeout(refreshTimeout);
                    refreshTimeout = setTimeout(()=>{
                        if (!res.data?.[0]) return;
                        if (res.data?.[0]) {
                            setActiveEntries((prev)=>{
                                if (!prev) {
                                    return null;
                                }
                                return [
                                    ...prev,
                                    // @ts-ignore
                                    ...res.data, 
                                ];
                            });
                        }
                    }, 500);
                }).catch((err)=>{
                    console.log("Infinite Scroll Error =>", err);
                }).finally(()=>{
                    console.log("Infinite Scroll Done. Page", pageRef.current);
                });
            }
        }
        /** @type {IntersectionObserverInit} */ const ISObserverOptions = {
            rootMargin: "0px 0px 0px 0px"
        };
        setTimeout(()=>{
            requestAnimationFrame(()=>{
                const infiniteScrollObserver = new IntersectionObserver(ISObserverCb, ISObserverOptions);
                if (infiniteScrollRef.current) infiniteScrollObserver.observe(infiniteScrollRef.current);
            });
        }, 1000);
    }, []);
    if (exhausted) {
        return /*#__PURE__*/ jsx_runtime_.jsx((external_react_default()).Fragment, {});
    }
    return /*#__PURE__*/ jsx_runtime_.jsx("div", {
        className: "w-full flex items-center justify-center",
        ref: infiniteScrollRef,
        children: /*#__PURE__*/ jsx_runtime_.jsx(LoadingBlock/* default */.Z, {
            position: "relative",
            style: {
                backgroundColor: "transparent"
            },
            width: "20px"
        })
    });
}

// EXTERNAL MODULE: ./components/general/ExtraContentDatabase.jsx
var ExtraContentDatabase = __webpack_require__(4941);
// EXTERNAL MODULE: ./package-shared/functions/backend/varDatabaseDbHandler.js
var varDatabaseDbHandler = __webpack_require__(1206);
var varDatabaseDbHandler_default = /*#__PURE__*/__webpack_require__.n(varDatabaseDbHandler);
// EXTERNAL MODULE: ./functions/backend/grabDelegatedUserFromCookie.js
var grabDelegatedUserFromCookie = __webpack_require__(5116);
var grabDelegatedUserFromCookie_default = /*#__PURE__*/__webpack_require__.n(grabDelegatedUserFromCookie);
// EXTERNAL MODULE: ./functions/backend/serverError.js
var serverError = __webpack_require__(2317);
var serverError_default = /*#__PURE__*/__webpack_require__.n(serverError);
// 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: ./layouts/components/GeneralLayout/ScrollToTopButton.jsx
var ScrollToTopButton = __webpack_require__(9360);
;// CONCATENATED MODULE: ./pages/admin/[user_id]/databases/[single]/tables/[single_table]/entries/index.jsx
// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 

const fs = __webpack_require__(7147);
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////

////////////////////////////////////////








/** ****************************************************************************** */ /** @type {import("@/package-shared/types").TableEntriesContextType} */ // @ts-ignore
const init = {};
const TableEntriesContext = /*#__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 {any[]} props.entries
 * @param {any} props.query
 * @param {any} props.confirmedDelegetedUser
 * @param {number} props.entriesCount
 */ function TableEntries({ user , database , table , dbSchemaData , entries , query , confirmedDelegetedUser , entriesCount ,  }) {
    /**
     * Get Contexts
     *
     * @abstract { React.useContext }
     */ ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * Javascript Variables
     *
     * @abstract Non hook variables and functions
     */ const pageTitle = `${table.tableFullName} Table Entries | Datasquirel`;
    const pageDescription = "All Entries in table";
    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 ... }
     */ const [targetEntry, setTargetEntry] = external_react_default().useState(null);
    /** @type {[ state: any[] | null, dispatch: React.Dispatch<React.SetStateAction<any[] | null>> ]} */ // @ts-ignore
    const [activeEntries, setActiveEntries] = external_react_default().useState(entries);
    const targetField = external_react_default().useRef("title");
    const searchTerm = external_react_default().useRef(null);
    /** @type {React.MutableRefObject<any[]>} */ const richTextEditors = external_react_default().useRef([]);
    /** @type {React.MutableRefObject<any[]>} */ const jsonTextEditors = external_react_default().useRef([]);
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * 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__*/ (0,jsx_runtime_.jsxs)(TableEntriesContext.Provider, {
            value: {
                user,
                database,
                table,
                dbSchemaData,
                entries,
                targetEntry,
                setTargetEntry,
                richTextEditors,
                jsonTextEditors,
                query,
                confirmedDelegetedUser,
                activeEntries,
                setActiveEntries,
                targetField,
                searchTerm,
                entriesCount
            },
            children: [
                /*#__PURE__*/ jsx_runtime_.jsx(TableEntriesContent, {}),
                /*#__PURE__*/ jsx_runtime_.jsx(ScrollToTopButton/* default */.Z, {
                    snug: true
                })
            ]
        })
    });
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 * ==============================================================================
 * 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: "/login",
                permanent: false
            }
        };
    }
    try {
        /**
         * Check delegated user token
         *
         * @description Check delegated user token
         */ /** @type {string} */ // @ts-ignore
        const slug = query.single;
        const dbUserData = await grabDelegatedUserFromCookie_default()({
            request: req,
            user: user,
            databaseSlug: slug,
            query
        });
        const dbUserDataObj = dbUserData;
        if (!dbUserDataObj) {
            throw new Error("No Db Object Found!");
        }
        const { dbUserId  } = dbUserDataObj;
        /**
         * Page/Site Data Data Fetching
         *
         * @description Fetch data on the server before returning
         */ const database = await DB_HANDLER_default()(`SELECT * FROM user_databases WHERE user_id='${dbUserId}' AND db_slug='${query.single}'`);
        if (!database || !database[0]) {
            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 === query.single_table)[0];
        const tableEntries = await varDatabaseDbHandler_default()({
            database: database[0].db_full_name,
            queryString: `SELECT * FROM \`${targetTable.tableName}\` ORDER BY id DESC LIMIT 20`,
            tableSchema: targetTable
        });
        const tableEntriesCount = await varDatabaseDbHandler_default()({
            database: database[0].db_full_name,
            queryString: `SELECT COUNT(id) AS count FROM ${targetTable.tableName}`,
            tableSchema: targetTable
        });
        ////////////////////////////////////////
        ////////////////////////////////////////
        ////////////////////////////////////////
        /**
         * Server props return
         *
         * @description Return data fetched on the server side
         */ return {
            props: {
                user: user,
                database: database[0],
                table: targetTable,
                dbSchemaData: dbSchemaData,
                entries: tableEntries,
                query,
                confirmedDelegetedUser,
                entriesCount: tableEntriesCount?.[0]?.count || 0
            }
        };
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    } catch (/** @type {any} */ error) {
        serverError_default()({
            component: "[single_table]/entries-page-component/getServerSideProps/catch-error",
            message: error.message,
            user: user
        });
        return {
            // redirect: {
            //     destination: "/login",
            //     permanent: false
            // },
            props: {
                user: user,
                database: null,
                table: null,
                entries: []
            }
        };
    }
}


/***/ })

};
;