@solidxai/core-ui 0.1.12-beta.3 → 0.1.12-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/auth/AuthLayout.d.ts.map +1 -1
- package/dist/components/auth/AuthLayout.js +12 -5
- package/dist/components/auth/AuthLayout.js.map +1 -1
- package/dist/components/auth/AuthLayout.tsx +15 -4
- package/dist/components/auth/AuthSettingsContext.js +1 -1
- package/dist/components/auth/AuthSettingsContext.js.map +1 -1
- package/dist/components/auth/AuthSettingsContext.tsx +1 -1
- package/dist/components/core/chatter/SolidChatterHeader.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidChatterHeader.js +18 -4
- package/dist/components/core/chatter/SolidChatterHeader.js.map +1 -1
- package/dist/components/core/chatter/SolidChatterHeader.tsx +17 -3
- package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.d.ts.map +1 -1
- package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js +12 -2
- package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js.map +1 -1
- package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.tsx +12 -1
- package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.d.ts +2 -0
- package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.d.ts.map +1 -1
- package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.js +4 -2
- package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.js.map +1 -1
- package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.tsx +11 -3
- package/dist/components/core/form/SolidFormView.js +1 -1
- package/dist/components/core/form/SolidFormView.js.map +1 -1
- package/dist/components/core/form/SolidFormView.tsx +1 -1
- package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js +11 -1
- package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js.map +1 -1
- package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx +26 -19
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +13 -5
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +16 -9
- package/dist/components/core/json/SolidJsonEditor.css +7 -0
- package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
- package/dist/components/core/list/SolidDataTable.js +2 -2
- package/dist/components/core/list/SolidDataTable.js.map +1 -1
- package/dist/components/core/list/SolidDataTable.tsx +2 -1
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +58 -58
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidListView.tsx +5 -4
- package/dist/components/core/model/FieldMetaDataForm.d.ts +1 -1
- package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.js +119 -102
- package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.tsx +82 -39
- package/dist/components/core/model/FieldSelector.d.ts +5 -1
- package/dist/components/core/model/FieldSelector.d.ts.map +1 -1
- package/dist/components/core/model/FieldSelector.js +25 -6
- package/dist/components/core/model/FieldSelector.js.map +1 -1
- package/dist/components/core/model/FieldSelector.tsx +50 -5
- package/dist/components/core/module/CreateModule.css +60 -6
- package/dist/components/core/module/CreateModule.d.ts.map +1 -1
- package/dist/components/core/module/CreateModule.js +2 -2
- package/dist/components/core/module/CreateModule.js.map +1 -1
- package/dist/components/core/module/CreateModule.tsx +56 -37
- package/dist/components/layout/AdminTopHeader.js +1 -1
- package/dist/components/layout/AdminTopHeader.js.map +1 -1
- package/dist/components/layout/AdminTopHeader.tsx +2 -2
- package/dist/components/shad-cn-ui/SolidSelect.d.ts +2 -1
- package/dist/components/shad-cn-ui/SolidSelect.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidSelect.js +12 -4
- package/dist/components/shad-cn-ui/SolidSelect.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidSelect.tsx +13 -1
- package/dist/helpers/modelViewPersistence.d.ts.map +1 -1
- package/dist/helpers/modelViewPersistence.js +3 -2
- package/dist/helpers/modelViewPersistence.js.map +1 -1
- package/dist/helpers/modelViewPersistence.ts +3 -2
- package/dist/redux/api/datasourceIntrospectionApi.d.ts +43 -1
- package/dist/redux/api/datasourceIntrospectionApi.d.ts.map +1 -1
- package/dist/redux/api/datasourceIntrospectionApi.js +34 -1
- package/dist/redux/api/datasourceIntrospectionApi.js.map +1 -1
- package/dist/redux/api/datasourceIntrospectionApi.ts +61 -0
- package/dist/redux/store/defaultStoreConfig.d.ts +11 -0
- package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
- package/dist/resources/solid-custom.css +3 -86
- package/dist/resources/solid-tailwind-generated.css +1 -1
- package/dist/resources/themes/solid-dark-purple/theme-variables.css +226 -0
- package/dist/resources/themes/solid-dark-purple/theme.css +1 -185
- package/dist/resources/themes/solid-light-purple/theme-variables.css +237 -0
- package/dist/resources/themes/solid-light-purple/theme.css +1 -206
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.css +396 -31
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +680 -152
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +1358 -441
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateModule.js","sourceRoot":"","sources":["../../../../src/components/core/module/CreateModule.tsx"],"names":[],"mappings":"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","sourcesContent":["import { DropzonePlaceholder } from \"../../../components/common/DropzonePlaceholder\";\nimport { FileReaderExt } from \"../../../components/common/FileReaderExt\";\nimport { ERROR_MESSAGES } from \"../../../constants/error-messages\";\nimport { getSingularAndPlural } from \"../../../helpers/helpers\";\nimport { useGetFieldDefaultMetaDataQuery } from \"../../../redux/api/fieldApi\";\nimport { useDeleteMediaMutation } from \"../../../redux/api/mediaApi\";\nimport { useCreatemoduleMutation, useUpdatemoduleMutation } from \"../../../redux/api/moduleApi\";\nimport { useFormik } from \"formik\";\nimport { usePathname } from \"../../../hooks/usePathname\";\nimport { useRouter } from \"../../../hooks/useRouter\";\nimport React, { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport { useDropzone } from \"react-dropzone\";\nimport * as Yup from \"yup\";\nimport { env } from \"../../../adapters/env\";\nimport styles from \"../form/fields/solidFields.module.css\";\nimport {\n SolidAutocomplete,\n SolidButton,\n SolidInput,\n SolidMessage,\n SolidPanel,\n SolidProgressBar,\n SolidTabGroup,\n SolidTextarea,\n SolidIcon,\n} from \"../../shad-cn-ui\";\nimport { useSolidAutocompleteField } from \"../../../hooks/useSolidAutocompleteField\";\nimport { SolidFormFooter } from \"../form/SolidFormFooter\";\nimport { ModuleMetadataExplorer } from \"./ModuleMetadataExplorer\";\nimport \"./CreateModule.css\";\n\n\n\n\nconst CreateModule = ({ params, data }: any) => {\n const dispatch = useDispatch();\n const router = useRouter();\n const pathname = usePathname()\n const [menuIconPreview, setmenuIconPreview] = useState<\n string | ArrayBuffer | null\n >(null);\n const [uploadProgress, setUploadProgress] = useState<number>(0);\n const [uploadCompleted, setUploadCompleted] = useState<boolean>(false);\n const [fileDetails, setFileDetails] = useState<{ name: string; type: string } | null>(null);\n const [uploadedSize, setUploadedSize] = useState<string>(\"0 MB\");\n const [totalSize, setTotalSize] = useState<string>(\"0 KB\");\n\n const formatFileSize = (size: number) => {\n return size >= 1024 * 1024\n ? `${(size / (1024 * 1024)).toFixed(1)} MB`\n : `${(size / 1024).toFixed(1)} KB`;\n };\n\n const [\n CreateModule,\n { isLoading, isSuccess, isError, error, data: newModule },\n ] = useCreatemoduleMutation();\n\n const [\n UpdateModule,\n { isLoading: isModuleUpdateLoading, isSuccess: isModuleUpdateSuccess, isError: isModuleUpdateError, error: updateModuleError, data: updatedModule },\n ] = useUpdatemoduleMutation();\n\n const { data: fieldDefaultMetaData, isLoading: isFieldDefaultMetaDataLoading, error: FieldDefaultMetaDataError, refetch: fieldDefaultMetaDataRefech } = useGetFieldDefaultMetaDataQuery(null);\n\n const [\n deleteMedia,\n { isLoading: isMediaDeleted, isSuccess: isDeleteMediaSuceess, isError: isMediaDeleteError, error: mediaDeleteError, data: DeletedMedia },\n ] = useDeleteMediaMutation();\n\n const initialValues = {\n name: data ? data.name : \"\",\n displayName: data ? data.displayName : \"\",\n description: data ? data.description : \"\",\n defaultDataSource: data ? data.defaultDataSource : \"\",\n isSystem: data ? data.isSystem : false,\n menuIconUrl: data ? data.menuIconUrl : \"\",\n menuSequenceNumber: data ? data.menuSequenceNumber : \"\"\n };\n\n\n const validationSchema = Yup.object({\n name: Yup.string()\n // .matches(\n // /^[a-z]+(-[a-z]+)*$/,\n // \"Invalid format. Use lowercase letters and hyphens only\"\n // )\n .required(ERROR_MESSAGES.FIELD_REUQIRED('Name')),\n displayName: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(\"Display Name\")),\n description: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(\"Description Name\")),\n defaultDataSource: Yup.string(),\n menuIconUrl: Yup.string().nullable(),\n isSystem: Yup.boolean(),\n menuSequenceNumber: Yup.number(),\n\n });\n\n const dataSources = [\n { label: \"Mysql\", value: \"mysql\" },\n { label: \"Postgres\", value: \"postgres\" },\n { label: \"Mssql\", value: \"mssql\" },\n { label: \"Oracle\", value: \"oracle\" },\n { label: \"Mariadb\", value: \"mariadb\" },\n ];\n\n const isFormFieldValid = (formik: any, fieldName: string) =>\n formik.touched[fieldName] && formik.errors[fieldName];\n\n const formik = useFormik({\n initialValues,\n validationSchema,\n enableReinitialize: true,\n onSubmit: async (values) => {\n try {\n let formData = new FormData();\n formData.append('name', values.name);\n formData.append('displayName', values.displayName.trim());\n formData.append('description', values.description);\n formData.append('defaultDataSource', values.defaultDataSource);\n formData.append('isSystem', values.isSystem == \"true\" ? \"true\" : \"\");\n if (values.menuIconUrl) {\n formData.append('menuIconUrl', values.menuIconUrl);\n }\n formData.append('menuSequenceNumber', values.menuSequenceNumber);\n\n // let formData = new FormData();\n // formData.append('name', values.name);\n // formData.append('displayName', values.displayName);\n // formData.append('description', values.description);\n // formData.append('defaultDataSource', values.defaultDataSource);\n if (data) {\n UpdateModule({ id: data.id, data: formData });\n } else {\n CreateModule(formData);\n }\n } catch (err) {\n console.error(ERROR_MESSAGES.FAILED_CREATE_MENU, err);\n }\n },\n });\n\n const handleDropmenuIcon = (acceptedFiles: File[]) => {\n const file = acceptedFiles[0];\n if (!file) return;\n\n setUploadCompleted(false);\n setUploadProgress(0);\n setTotalSize(formatFileSize(file.size));\n setUploadedSize(\"0 KB\");\n setFileDetails({ name: file.name, type: file.type });\n\n const reader = new FileReader();\n\n reader.onloadstart = () => {\n setUploadProgress(0);\n setUploadedSize(\"0 KB\");\n };\n reader.onprogress = (event) => {\n if (event.loaded && event.total) {\n const percent = Math.round((event.loaded / event.total) * 100);\n setUploadProgress(percent);\n setUploadedSize(formatFileSize(event.loaded));\n }\n };\n\n reader.onloadend = () => {\n setUploadProgress(100);\n setUploadCompleted(true);\n setUploadedSize(totalSize); // Set uploaded size to total size after completion\n };\n\n reader.readAsDataURL(file);\n formik.setFieldValue(\"menuIconUrl\", file);\n };\n\n const { getRootProps: getRootPropsmenuIcon, getInputProps: getInputPropsmenuIcon, isDragActive: isDragActivemenuIcon } = useDropzone({\n onDrop: handleDropmenuIcon,\n accept: {\n 'image/jpeg': [],\n 'image/png': [],\n 'image/svg+xml': ['.svg']\n },\n maxSize: 2 * 1024 * 1024, // 2MB\n });\n\n useEffect(() => {\n if (data) {\n setmenuIconPreview(`${env(\"API_URL\")}/${data.menuIconUrl}`);\n\n const fileName = data?.menuIconUrl?.split(\"/\").pop(); // Extract filename from URL\n setFileDetails({ name: fileName || \"Unknown File\", type: \"Uploaded File\" });\n\n // Set the upload progress to 100% since the file is already uploaded\n setUploadProgress(100);\n setUploadCompleted(true);\n\n // Ensure Formik has the existing file URL\n formik.setFieldValue(\"menuIconUrl\", data.menuIconUrl);\n }\n }, [data])\n const handleCancelUpload = (e: React.MouseEvent) => {\n e.stopPropagation();\n setUploadProgress(0);\n setUploadCompleted(false);\n setFileDetails(null);\n formik.setFieldValue(\"menuIconUrl\", null);\n };\n\n\n const showError = async () => {\n const errors = await formik.validateForm(); // Trigger validation and get the updated errors\n const errorMessages = Object.values(errors);\n\n if (errorMessages.length > 0) {\n const detail = Array.isArray(errorMessages) ? errorMessages.join(', ') : String(errorMessages);\n dispatch(showToast({ severity: 'error', summary: 'Error', detail }));\n // </div>\n // ))}\n // </div>\n // ),\n // });\n }\n };\n\n const showCustomeError = async (error: string[]) => {\n if (error.length > 0) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.SEND_REPORT, detail: error.join(', '), life: 3000 }));\n }\n };\n\n useEffect(() => {\n if (isSuccess == true || isModuleUpdateSuccess == true) {\n router.push(`/admin/core/solid-core/module-metadata/list`);\n }\n }, [isSuccess, isModuleUpdateSuccess])\n\n\n\n const serachDDefaultDataSource = async (event: any) => {\n const query = event.query;\n try {\n const filterredData: any = fieldDefaultMetaData.data.dataSource.filter((t: any) => t.name.toLowerCase().startsWith(query.toLowerCase()));\n const transformedData = filterredData.map((e: any) => ({ label: e.name, value: e.name, type: e.type }));\n return transformedData\n } catch (error) {\n console.error(ERROR_MESSAGES.FETCHING_ITEMS, error);\n return []\n }\n };\n\n const defaultDataSourceField = useSolidAutocompleteField({\n formik,\n fieldName: \"defaultDataSource\",\n labelKey: \"label\",\n valueKey: \"value\",\n searchData: serachDDefaultDataSource,\n existingData: formik.values.defaultDataSource,\n });\n\n\n // Error Handler \n\n useEffect(() => {\n const errors = [\n { isError, error },\n { isError: isModuleUpdateError, error: updateModuleError },\n { isError: isMediaDeleteError, error: mediaDeleteError },\n ];\n\n // Handle any error\n errors.forEach(({ isError, error }) => {\n if (isError && error) {\n const errorMessage = error && typeof error === 'object' && 'data' in error && 'message' in (error as any).data\n ? (error as any).data.message\n : 'Something went wrong';\n const detail = Array.isArray(errorMessage) ? errorMessage.join(', ') : String(errorMessage);\n dispatch(showToast({ severity: 'error', summary: 'Error', detail }));\n }\n });\n }, [isError, isModuleUpdateError, isMediaDeleteError])\n\n const [activeWorkspaceTab, setActiveWorkspaceTab] = useState(\"general\");\n\n const isCreateMode = pathname.includes('new');\n const shouldShowGeneralSave = isCreateMode || activeWorkspaceTab === \"general\";\n\n const handleCancel = () => {\n router.back();\n };\n\n const generalInfoContent = (\n <div className={`solid-module-general-info-content ${!isCreateMode ? \"is-tabbed\" : \"\"}`}>\n {!isCreateMode && shouldShowGeneralSave && formik.dirty && (\n <div className=\"solid-module-general-info-actions\">\n <SolidButton\n size=\"sm\"\n type=\"submit\"\n form=\"module-general-info-form\"\n onClick={() => showError()}\n >\n Save\n </SolidButton>\n </div>\n )}\n <form\n id=\"module-general-info-form\"\n style={{ width: '100%', background: \"#fff\" }}\n onSubmit={formik.handleSubmit}\n >\n <div className=\"solid-form-content\">\n <SolidPanel header={\"Basic Info\"} className=\"solid-column-panel\">\n <div className=\"mt-3 flex flex-wrap -mx-2 -mt-2\">\n <div className=\"field w-full px-2 pt-2 pb-3 lg:w-1/2 lg:pb-0\">\n <div className={styles.fieldWrapper}>\n <label htmlFor=\"displayName\" className={`${styles.fieldLabel} form-field-label`}>\n Display Name <span className=\"text-red-500\">*</span>\n </label>\n <SolidInput\n disabled={!!data}\n type=\"text\"\n id=\"displayName\"\n name=\"displayName\"\n onChange={(e) => {\n formik.handleChange(e);\n const { toKebabCase } = getSingularAndPlural(e.target.value);\n if (pathname.includes('new')) {\n formik.setFieldValue(\"name\", toKebabCase);\n }\n }}\n value={formik.values.displayName}\n className={styles.fieldInput}\n />\n {isFormFieldValid(formik, \"displayName\") && (\n <p className={styles.fieldError}>{formik?.errors?.displayName?.toString()}</p>\n )}\n </div>\n </div>\n <div className=\"field w-full px-2 pt-2 lg:w-1/2\">\n <div className={styles.fieldWrapper}>\n <label htmlFor=\"name\" className={`${styles.fieldLabel} form-field-label`}>\n Name <span className=\"text-red-500\">*</span>\n </label>\n <SolidInput\n disabled\n type=\"text\"\n id=\"name\"\n name=\"name\"\n onChange={formik.handleChange}\n value={formik.values.name}\n className={styles.fieldInput}\n />\n {isFormFieldValid(formik, \"name\") && (\n <p className={styles.fieldError}>{formik?.errors?.name?.toString()}</p>\n )}\n </div>\n </div>\n </div>\n <div className=\"mt-4 flex flex-wrap -mx-2 -mt-2\">\n <div className=\"field w-full px-2 pt-2 pb-3 lg:w-1/2 lg:pb-0\">\n <div className={styles.fieldWrapper}>\n <label htmlFor=\"menuSequenceNumber\" className={`${styles.fieldLabel} form-field-label`}>\n Menu Sequence Number\n </label>\n <SolidInput\n id=\"menuSequenceNumber\"\n type=\"number\"\n onChange={formik.handleChange}\n min={0}\n value={formik.values.menuSequenceNumber}\n className={styles.fieldInput}\n />\n {isFormFieldValid(formik, \"menuSequenceNumber\") && (\n <p className={styles.fieldError}>{formik?.errors?.menuSequenceNumber?.toString()}</p>\n )}\n </div>\n </div>\n <div className=\"field w-full px-2 pt-2 lg:w-1/2\">\n <div className={styles.fieldWrapper}>\n <label htmlFor=\"description\" className={`${styles.fieldLabel} form-field-label`}>\n Description <span className=\"text-red-500\">*</span>\n </label>\n <SolidTextarea\n id=\"description\"\n name=\"description\"\n onChange={formik.handleChange}\n value={formik.values.description}\n className={styles.fieldTextarea}\n rows={5}\n cols={30}\n />\n {isFormFieldValid(formik, \"description\") && (\n <p className={styles.fieldError}>{formik?.errors?.description?.toString()}</p>\n )}\n </div>\n </div>\n </div>\n </SolidPanel>\n <SolidPanel header={\"Configurations\"} className=\"solid-column-panel mt-4\">\n <div className=\"mt-3 flex flex-wrap -mx-2 -mt-2\">\n <div className=\"field w-full px-2 pt-2 pb-3 lg:w-1/2 lg:pb-0\">\n <div className={styles.fieldWrapper}>\n <label htmlFor=\"defaultDataSource\" className={`${styles.fieldLabel} form-field-label`}>\n Default Data Source\n </label>\n <div className=\"solid-standard-autocomplete w-full\">\n <SolidAutocomplete\n disabled={!!data}\n value={defaultDataSourceField.selectedItem}\n suggestions={defaultDataSourceField.filteredItems}\n completeMethod={defaultDataSourceField.searchItems}\n onChange={defaultDataSourceField.handleChange}\n dropdown\n field=\"label\"\n className=\"w-full\"\n />\n </div>\n {isFormFieldValid(formik, \"defaultDataSource\") && (\n <p className={styles.fieldError}>{formik?.errors?.defaultDataSource?.toString()}</p>\n )}\n </div>\n </div>\n <div className=\"field w-full px-2 pt-2 lg:w-1/2\">\n <div className={`${styles.fieldWrapper} relative`}>\n <label htmlFor=\"menuIconUrl\" className={`${styles.fieldLabel} form-field-label`}>\n Menu Icon <small className=\"text-red-500 helper-text\">(only svg, png and jpeg are allowed)</small>\n </label>\n <div {...getRootPropsmenuIcon()} className=\"solid-dropzone-wrapper\">\n <input {...getInputPropsmenuIcon()} />\n <DropzonePlaceholder />\n </div>\n {isFormFieldValid(formik, \"menuIconUrl\") && (\n <SolidMessage severity=\"error\" text={formik?.errors?.menuIconUrl?.toString()} className=\"mt-2\" />\n )}\n\n {fileDetails && (\n <div className=\"solid-file-upload-wrapper mt-4\">\n <div className=\"flex items-center gap-2\">\n <FileReaderExt fileDetails={fileDetails} />\n <div className=\"flex w-full flex-col gap-1\">\n <div className=\"flex items-center justify-between\">\n <div className=\"font-bold solid-module-mobile-text-wrapper\">{fileDetails.name}</div>\n <button\n type=\"button\"\n className=\"solid-file-icon-btn is-danger solid-module-upload-remove\"\n aria-label=\"Remove uploaded menu icon\"\n onClick={handleCancelUpload}\n >\n <SolidIcon name=\"si-times\" aria-hidden />\n </button>\n </div>\n {uploadCompleted ? (\n <div className=\"flex items-center gap-2 text-sm\">\n {totalSize} of {totalSize}\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"4\" height=\"4\" viewBox=\"0 0 4 4\" fill=\"none\">\n <circle cx=\"2\" cy=\"2\" r=\"2\" fill=\"#C1C1C1\" />\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <mask id=\"mask0_2480_8635\" style={{ maskType: 'alpha' }} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"20\" height=\"20\">\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\n </mask>\n <g mask=\"url(#mask0_2480_8635)\">\n <path d=\"M9.16 12.76L13.39 8.53L12.55 7.69L9.16 11.08L7.45 9.37L6.61 10.21L9.16 12.76ZM10 16C9.17 16 8.39 15.8424 7.66 15.5272C6.93 15.2124 6.295 14.785 5.755 14.245C5.215 13.705 4.7876 13.07 4.4728 12.34C4.1576 11.61 4 10.83 4 10C4 9.17 4.1576 8.39 4.4728 7.66C4.7876 6.93 5.215 5.215 5.755 5.755C6.295 5.215 6.93 4.7874 7.66 4.4722C8.39 4.1574 9.17 4 10 4C10.83 4 11.61 4.1574 12.34 4.4722C13.07 4.7874 13.705 5.215 14.245 5.755C14.785 6.295 15.2124 6.93 15.5272 7.66C15.8424 8.39 16 9.17 16 10C16 10.83 15.8424 11.61 15.5272 12.34C15.2124 13.07 14.785 13.705 14.245 14.245C13.705 14.785 13.07 15.2124 12.34 15.5272C11.61 15.8424 10.83 16 10 16Z\" fill=\"var(--primary-color, var(--primary))\" />\n </g>\n </svg>\n Completed\n </div>\n ) : (\n <div className=\"flex items-center gap-2 text-sm\">\n {uploadedSize} of {totalSize}\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"4\" height=\"4\" viewBox=\"0 0 4 4\" fill=\"none\">\n <circle cx=\"2\" cy=\"2\" r=\"2\" fill=\"#C1C1C1\" />\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M7.375 10.5V5.40625L5.75 7.03125L4.875 6.125L8 3L11.125 6.125L10.25 7.03125L8.625 5.40625V10.5H7.375ZM4.25 13C3.90625 13 3.61198 12.8776 3.36719 12.6328C3.1224 12.388 3 12.0938 3 11.75V9.875H4.25V11.75H11.75V9.875H13V11.75C13 12.0938 12.8776 12.388 12.6328 12.6328C12.388 12.8776 12.0938 13 11.75 13H4.25Z\" fill=\"black\" />\n </svg>\n Uploading ${uploadProgress}% Completed\n </div>\n )}\n </div>\n </div>\n <SolidProgressBar value={uploadProgress} showValue={false} style={{ height: 4 }} className=\"mt-2\" />\n </div>\n )}\n </div>\n </div>\n </div>\n </SolidPanel>\n </div>\n </form>\n <SolidFormFooter params={params}></SolidFormFooter>\n </div>\n );\n\n return (\n <div className=\"solid-form-wrapper\">\n <div className=\"solid-form-section\" style={{ borderRight: params.embeded !== true ? '1px solid var(--primary-light-color)' : '' }} >\n {isCreateMode && (\n <div className=\"solid-form-header flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex flex-col gap-1\" />\n <div className=\"flex items-center gap-2\">\n <SolidButton\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n onClick={handleCancel}\n className=\"bg-[var(--primary-color-text)]\"\n >\n Cancel\n </SolidButton>\n {shouldShowGeneralSave && formik.dirty && (\n <SolidButton\n size=\"sm\"\n type=\"submit\"\n form=\"module-general-info-form\"\n onClick={() => showError()}\n >\n Save\n </SolidButton>\n )}\n </div>\n </div>\n )}\n\n {isCreateMode ? (\n generalInfoContent\n ) : (\n <div className=\"solid-module-form-workspace\">\n <SolidTabGroup\n value={activeWorkspaceTab}\n onValueChange={setActiveWorkspaceTab}\n className=\"solid-module-form-tabs\"\n listClassName=\"solid-module-form-tablist\"\n panelClassName=\"solid-module-form-tabpanel\"\n extra={(\n <div className=\"solid-module-form-tab-extra\">\n <SolidButton\n type=\"button\"\n size=\"sm\"\n onClick={() => router.push(`/admin/core/solid-core/modules/${data?.id}/datasource-introspection`)}\n >\n Auto Map Tables\n </SolidButton>\n </div>\n )}\n tabs={[\n {\n value: \"general\",\n label: <span className=\"solid-module-form-tab-label\">General Info</span>,\n content: generalInfoContent,\n },\n {\n value: \"explorer\",\n label: <span className=\"solid-module-form-tab-label\">Explorer</span>,\n content: <ModuleMetadataExplorer moduleName={data?.name} moduleId={data?.id} />,\n },\n ]}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default CreateModule;\n"]}
|
|
1
|
+
{"version":3,"file":"CreateModule.js","sourceRoot":"","sources":["../../../../src/components/core/module/CreateModule.tsx"],"names":[],"mappings":"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","sourcesContent":["import { DropzonePlaceholder } from \"../../../components/common/DropzonePlaceholder\";\nimport { FileReaderExt } from \"../../../components/common/FileReaderExt\";\nimport { ERROR_MESSAGES } from \"../../../constants/error-messages\";\nimport { getSingularAndPlural } from \"../../../helpers/helpers\";\nimport { useGetFieldDefaultMetaDataQuery } from \"../../../redux/api/fieldApi\";\nimport { useDeleteMediaMutation } from \"../../../redux/api/mediaApi\";\nimport { useCreatemoduleMutation, useUpdatemoduleMutation } from \"../../../redux/api/moduleApi\";\nimport { useFormik } from \"formik\";\nimport { usePathname } from \"../../../hooks/usePathname\";\nimport { useRouter } from \"../../../hooks/useRouter\";\nimport React, { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport { useDropzone } from \"react-dropzone\";\nimport * as Yup from \"yup\";\nimport { env } from \"../../../adapters/env\";\nimport styles from \"../form/fields/solidFields.module.css\";\nimport {\n SolidAutocomplete,\n SolidButton,\n SolidInput,\n SolidMessage,\n SolidPanel,\n SolidProgressBar,\n SolidTabGroup,\n SolidTextarea,\n SolidIcon,\n} from \"../../shad-cn-ui\";\nimport { useSolidAutocompleteField } from \"../../../hooks/useSolidAutocompleteField\";\nimport { SolidFormFooter } from \"../form/SolidFormFooter\";\nimport { ModuleMetadataExplorer } from \"./ModuleMetadataExplorer\";\nimport \"./CreateModule.css\";\n\n\n\n\nconst CreateModule = ({ params, data }: any) => {\n const dispatch = useDispatch();\n const router = useRouter();\n const pathname = usePathname()\n const [menuIconPreview, setmenuIconPreview] = useState<\n string | ArrayBuffer | null\n >(null);\n const [uploadProgress, setUploadProgress] = useState<number>(0);\n const [uploadCompleted, setUploadCompleted] = useState<boolean>(false);\n const [fileDetails, setFileDetails] = useState<{ name: string; type: string } | null>(null);\n const [uploadedSize, setUploadedSize] = useState<string>(\"0 MB\");\n const [totalSize, setTotalSize] = useState<string>(\"0 KB\");\n\n const formatFileSize = (size: number) => {\n return size >= 1024 * 1024\n ? `${(size / (1024 * 1024)).toFixed(1)} MB`\n : `${(size / 1024).toFixed(1)} KB`;\n };\n\n const [\n CreateModule,\n { isLoading, isSuccess, isError, error, data: newModule },\n ] = useCreatemoduleMutation();\n\n const [\n UpdateModule,\n { isLoading: isModuleUpdateLoading, isSuccess: isModuleUpdateSuccess, isError: isModuleUpdateError, error: updateModuleError, data: updatedModule },\n ] = useUpdatemoduleMutation();\n\n const { data: fieldDefaultMetaData, isLoading: isFieldDefaultMetaDataLoading, error: FieldDefaultMetaDataError, refetch: fieldDefaultMetaDataRefech } = useGetFieldDefaultMetaDataQuery(null);\n\n const [\n deleteMedia,\n { isLoading: isMediaDeleted, isSuccess: isDeleteMediaSuceess, isError: isMediaDeleteError, error: mediaDeleteError, data: DeletedMedia },\n ] = useDeleteMediaMutation();\n\n const initialValues = {\n name: data ? data.name : \"\",\n displayName: data ? data.displayName : \"\",\n description: data ? data.description : \"\",\n defaultDataSource: data ? data.defaultDataSource : \"\",\n isSystem: data ? data.isSystem : false,\n menuIconUrl: data ? data.menuIconUrl : \"\",\n menuSequenceNumber: data ? data.menuSequenceNumber : \"\"\n };\n\n\n const validationSchema = Yup.object({\n name: Yup.string()\n // .matches(\n // /^[a-z]+(-[a-z]+)*$/,\n // \"Invalid format. Use lowercase letters and hyphens only\"\n // )\n .required(ERROR_MESSAGES.FIELD_REUQIRED('Name')),\n displayName: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(\"Display Name\")),\n description: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(\"Description Name\")),\n defaultDataSource: Yup.string(),\n menuIconUrl: Yup.string().nullable(),\n isSystem: Yup.boolean(),\n menuSequenceNumber: Yup.number(),\n\n });\n\n const dataSources = [\n { label: \"Mysql\", value: \"mysql\" },\n { label: \"Postgres\", value: \"postgres\" },\n { label: \"Mssql\", value: \"mssql\" },\n { label: \"Oracle\", value: \"oracle\" },\n { label: \"Mariadb\", value: \"mariadb\" },\n ];\n\n const isFormFieldValid = (formik: any, fieldName: string) =>\n formik.touched[fieldName] && formik.errors[fieldName];\n\n const formik = useFormik({\n initialValues,\n validationSchema,\n enableReinitialize: true,\n onSubmit: async (values) => {\n try {\n let formData = new FormData();\n formData.append('name', values.name);\n formData.append('displayName', values.displayName.trim());\n formData.append('description', values.description);\n formData.append('defaultDataSource', values.defaultDataSource);\n formData.append('isSystem', values.isSystem == \"true\" ? \"true\" : \"\");\n if (values.menuIconUrl) {\n formData.append('menuIconUrl', values.menuIconUrl);\n }\n formData.append('menuSequenceNumber', values.menuSequenceNumber);\n\n // let formData = new FormData();\n // formData.append('name', values.name);\n // formData.append('displayName', values.displayName);\n // formData.append('description', values.description);\n // formData.append('defaultDataSource', values.defaultDataSource);\n if (data) {\n UpdateModule({ id: data.id, data: formData });\n } else {\n CreateModule(formData);\n }\n } catch (err) {\n console.error(ERROR_MESSAGES.FAILED_CREATE_MENU, err);\n }\n },\n });\n\n const handleDropmenuIcon = (acceptedFiles: File[]) => {\n const file = acceptedFiles[0];\n if (!file) return;\n\n setUploadCompleted(false);\n setUploadProgress(0);\n setTotalSize(formatFileSize(file.size));\n setUploadedSize(\"0 KB\");\n setFileDetails({ name: file.name, type: file.type });\n\n const reader = new FileReader();\n\n reader.onloadstart = () => {\n setUploadProgress(0);\n setUploadedSize(\"0 KB\");\n };\n reader.onprogress = (event) => {\n if (event.loaded && event.total) {\n const percent = Math.round((event.loaded / event.total) * 100);\n setUploadProgress(percent);\n setUploadedSize(formatFileSize(event.loaded));\n }\n };\n\n reader.onloadend = () => {\n setUploadProgress(100);\n setUploadCompleted(true);\n setUploadedSize(totalSize); // Set uploaded size to total size after completion\n };\n\n reader.readAsDataURL(file);\n formik.setFieldValue(\"menuIconUrl\", file);\n };\n\n const { getRootProps: getRootPropsmenuIcon, getInputProps: getInputPropsmenuIcon, isDragActive: isDragActivemenuIcon } = useDropzone({\n onDrop: handleDropmenuIcon,\n accept: {\n 'image/jpeg': [],\n 'image/png': [],\n 'image/svg+xml': ['.svg']\n },\n maxSize: 2 * 1024 * 1024, // 2MB\n });\n\n useEffect(() => {\n if (data) {\n setmenuIconPreview(`${env(\"API_URL\")}/${data.menuIconUrl}`);\n\n const fileName = data?.menuIconUrl?.split(\"/\").pop(); // Extract filename from URL\n setFileDetails({ name: fileName || \"Unknown File\", type: \"Uploaded File\" });\n\n // Set the upload progress to 100% since the file is already uploaded\n setUploadProgress(100);\n setUploadCompleted(true);\n\n // Ensure Formik has the existing file URL\n formik.setFieldValue(\"menuIconUrl\", data.menuIconUrl);\n }\n }, [data])\n const handleCancelUpload = (e: React.MouseEvent) => {\n e.stopPropagation();\n setUploadProgress(0);\n setUploadCompleted(false);\n setFileDetails(null);\n formik.setFieldValue(\"menuIconUrl\", null);\n };\n\n\n const showError = async () => {\n const errors = await formik.validateForm(); // Trigger validation and get the updated errors\n const errorMessages = Object.values(errors);\n\n if (errorMessages.length > 0) {\n const detail = Array.isArray(errorMessages) ? errorMessages.join(', ') : String(errorMessages);\n dispatch(showToast({ severity: 'error', summary: 'Error', detail }));\n // </div>\n // ))}\n // </div>\n // ),\n // });\n }\n };\n\n const showCustomeError = async (error: string[]) => {\n if (error.length > 0) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.SEND_REPORT, detail: error.join(', '), life: 3000 }));\n }\n };\n\n useEffect(() => {\n if (isSuccess == true || isModuleUpdateSuccess == true) {\n router.push(`/admin/core/solid-core/module-metadata/list`);\n }\n }, [isSuccess, isModuleUpdateSuccess])\n\n\n\n const serachDDefaultDataSource = async (event: any) => {\n const query = event.query;\n try {\n const filterredData: any = fieldDefaultMetaData.data.dataSource.filter((t: any) => t.name.toLowerCase().startsWith(query.toLowerCase()));\n const transformedData = filterredData.map((e: any) => ({ label: e.name, value: e.name, type: e.type }));\n return transformedData\n } catch (error) {\n console.error(ERROR_MESSAGES.FETCHING_ITEMS, error);\n return []\n }\n };\n\n const defaultDataSourceField = useSolidAutocompleteField({\n formik,\n fieldName: \"defaultDataSource\",\n labelKey: \"label\",\n valueKey: \"value\",\n searchData: serachDDefaultDataSource,\n existingData: formik.values.defaultDataSource,\n });\n\n\n // Error Handler \n\n useEffect(() => {\n const errors = [\n { isError, error },\n { isError: isModuleUpdateError, error: updateModuleError },\n { isError: isMediaDeleteError, error: mediaDeleteError },\n ];\n\n // Handle any error\n errors.forEach(({ isError, error }) => {\n if (isError && error) {\n const errorMessage = error && typeof error === 'object' && 'data' in error && 'message' in (error as any).data\n ? (error as any).data.message\n : 'Something went wrong';\n const detail = Array.isArray(errorMessage) ? errorMessage.join(', ') : String(errorMessage);\n dispatch(showToast({ severity: 'error', summary: 'Error', detail }));\n }\n });\n }, [isError, isModuleUpdateError, isMediaDeleteError])\n\n const [activeWorkspaceTab, setActiveWorkspaceTab] = useState(\"general\");\n\n const isCreateMode = pathname.includes('new');\n const shouldShowGeneralSave = isCreateMode || activeWorkspaceTab === \"general\";\n\n const handleCancel = () => {\n router.back();\n };\n\n const generalInfoContent = (\n <div className={`solid-module-general-info-content ${!isCreateMode ? \"is-tabbed\" : \"\"}`}>\n {!isCreateMode && shouldShowGeneralSave && formik.dirty && (\n <div className=\"solid-module-general-info-actions\">\n <SolidButton\n size=\"sm\"\n type=\"submit\"\n form=\"module-general-info-form\"\n onClick={() => showError()}\n >\n Save\n </SolidButton>\n </div>\n )}\n <form\n id=\"module-general-info-form\"\n style={{ width: '100%', background: \"#fff\" }}\n onSubmit={formik.handleSubmit}\n >\n <div className=\"solid-form-content\">\n <SolidPanel header={\"Basic Info\"} className=\"solid-column-panel\">\n <div className=\"mt-3 flex flex-wrap -mx-2 -mt-2\">\n <div className=\"field w-full px-2 pt-2 pb-3 lg:w-1/2 lg:pb-0\">\n <div className={styles.fieldWrapper}>\n <label htmlFor=\"displayName\" className={`${styles.fieldLabel} form-field-label`}>\n Display Name <span className=\"text-red-500\">*</span>\n </label>\n <SolidInput\n disabled={!!data}\n type=\"text\"\n id=\"displayName\"\n name=\"displayName\"\n onChange={(e) => {\n formik.handleChange(e);\n const { toKebabCase } = getSingularAndPlural(e.target.value);\n if (pathname.includes('new')) {\n formik.setFieldValue(\"name\", toKebabCase);\n }\n }}\n value={formik.values.displayName}\n className={styles.fieldInput}\n />\n {isFormFieldValid(formik, \"displayName\") && (\n <p className={styles.fieldError}>{formik?.errors?.displayName?.toString()}</p>\n )}\n </div>\n </div>\n <div className=\"field w-full px-2 pt-2 lg:w-1/2\">\n <div className={styles.fieldWrapper}>\n <label htmlFor=\"name\" className={`${styles.fieldLabel} form-field-label`}>\n Name <span className=\"text-red-500\">*</span>\n </label>\n <SolidInput\n disabled\n type=\"text\"\n id=\"name\"\n name=\"name\"\n onChange={formik.handleChange}\n value={formik.values.name}\n className={styles.fieldInput}\n />\n {isFormFieldValid(formik, \"name\") && (\n <p className={styles.fieldError}>{formik?.errors?.name?.toString()}</p>\n )}\n </div>\n </div>\n </div>\n <div className=\"mt-4 flex flex-wrap -mx-2 -mt-2\">\n <div className=\"field w-full px-2 pt-2 pb-3 lg:w-1/2 lg:pb-0\">\n <div className={styles.fieldWrapper}>\n <label htmlFor=\"menuSequenceNumber\" className={`${styles.fieldLabel} form-field-label`}>\n Menu Sequence Number\n </label>\n <SolidInput\n id=\"menuSequenceNumber\"\n type=\"number\"\n onChange={formik.handleChange}\n min={0}\n value={formik.values.menuSequenceNumber}\n className={styles.fieldInput}\n />\n {isFormFieldValid(formik, \"menuSequenceNumber\") && (\n <p className={styles.fieldError}>{formik?.errors?.menuSequenceNumber?.toString()}</p>\n )}\n </div>\n </div>\n <div className=\"field w-full px-2 pt-2 lg:w-1/2\">\n <div className={styles.fieldWrapper}>\n <label htmlFor=\"description\" className={`${styles.fieldLabel} form-field-label`}>\n Description <span className=\"text-red-500\">*</span>\n </label>\n <SolidTextarea\n id=\"description\"\n name=\"description\"\n onChange={formik.handleChange}\n value={formik.values.description}\n className={styles.fieldTextarea}\n rows={5}\n cols={30}\n />\n {isFormFieldValid(formik, \"description\") && (\n <p className={styles.fieldError}>{formik?.errors?.description?.toString()}</p>\n )}\n </div>\n </div>\n </div>\n <div className=\"mt-4 flex flex-wrap -mx-2 -mt-2\">\n <div className=\"field w-full px-2 pt-2\">\n <div className={`${styles.fieldWrapper} relative`}>\n <label htmlFor=\"menuIconUrl\" className={`${styles.fieldLabel} form-field-label`}>\n Menu Icon <small className=\"text-red-500 helper-text\">(only svg, png and jpeg are allowed)</small>\n </label>\n <div {...getRootPropsmenuIcon()} className=\"solid-dropzone-wrapper\">\n <input {...getInputPropsmenuIcon()} />\n <DropzonePlaceholder />\n </div>\n {isFormFieldValid(formik, \"menuIconUrl\") && (\n <SolidMessage severity=\"error\" text={formik?.errors?.menuIconUrl?.toString()} className=\"mt-2\" />\n )}\n\n {fileDetails && (\n <div className=\"solid-file-upload-wrapper mt-4\">\n <div className=\"flex items-center gap-2\">\n <FileReaderExt fileDetails={fileDetails} />\n <div className=\"flex w-full flex-col gap-1\">\n <div className=\"flex items-center justify-between\">\n <div className=\"font-bold solid-module-mobile-text-wrapper\">{fileDetails.name}</div>\n <button\n type=\"button\"\n className=\"solid-file-icon-btn is-danger solid-module-upload-remove\"\n aria-label=\"Remove uploaded menu icon\"\n onClick={handleCancelUpload}\n >\n <SolidIcon name=\"si-times\" aria-hidden />\n </button>\n </div>\n {uploadCompleted ? (\n <div className=\"flex items-center gap-2 text-sm\">\n {totalSize} of {totalSize}\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"4\" height=\"4\" viewBox=\"0 0 4 4\" fill=\"none\">\n <circle cx=\"2\" cy=\"2\" r=\"2\" fill=\"#C1C1C1\" />\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <mask id=\"mask0_2480_8635\" style={{ maskType: 'alpha' }} maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"20\" height=\"20\">\n <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\n </mask>\n <g mask=\"url(#mask0_2480_8635)\">\n <path d=\"M9.16 12.76L13.39 8.53L12.55 7.69L9.16 11.08L7.45 9.37L6.61 10.21L9.16 12.76ZM10 16C9.17 16 8.39 15.8424 7.66 15.5272C6.93 15.2124 6.295 14.785 5.755 14.245C5.215 13.705 4.7876 13.07 4.4728 12.34C4.1576 11.61 4 10.83 4 10C4 9.17 4.1576 8.39 4.4728 7.66C4.7876 6.93 5.215 5.215 5.755 5.755C6.295 5.215 6.93 4.7874 7.66 4.4722C8.39 4.1574 9.17 4 10 4C10.83 4 11.61 4.1574 12.34 4.4722C13.07 4.7874 13.705 5.215 14.245 5.755C14.785 6.295 15.2124 6.93 15.5272 7.66C15.8424 8.39 16 9.17 16 10C16 10.83 15.8424 11.61 15.5272 12.34C15.2124 13.07 14.785 13.705 14.245 14.245C13.705 14.785 13.07 15.2124 12.34 15.5272C11.61 15.8424 10.83 16 10 16Z\" fill=\"var(--primary-color, var(--primary))\" />\n </g>\n </svg>\n Completed\n </div>\n ) : (\n <div className=\"flex items-center gap-2 text-sm\">\n {uploadedSize} of {totalSize}\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"4\" height=\"4\" viewBox=\"0 0 4 4\" fill=\"none\">\n <circle cx=\"2\" cy=\"2\" r=\"2\" fill=\"#C1C1C1\" />\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M7.375 10.5V5.40625L5.75 7.03125L4.875 6.125L8 3L11.125 6.125L10.25 7.03125L8.625 5.40625V10.5H7.375ZM4.25 13C3.90625 13 3.61198 12.8776 3.36719 12.6328C3.1224 12.388 3 12.0938 3 11.75V9.875H4.25V11.75H11.75V9.875H13V11.75C13 12.0938 12.8776 12.388 12.6328 12.6328C12.388 12.8776 12.0938 13 11.75 13H4.25Z\" fill=\"black\" />\n </svg>\n Uploading ${uploadProgress}% Completed\n </div>\n )}\n </div>\n </div>\n <SolidProgressBar value={uploadProgress} showValue={false} style={{ height: 4 }} className=\"mt-2\" />\n </div>\n )}\n </div>\n </div>\n </div>\n </SolidPanel>\n <SolidPanel header={\"Datasource Configuration\"} className=\"solid-column-panel mt-4\">\n <div className=\"mt-3 flex flex-wrap -mx-2 -mt-2\">\n <div className=\"field w-full px-2 pt-2\">\n <div className={styles.fieldWrapper}>\n <label htmlFor=\"defaultDataSource\" className={`${styles.fieldLabel} form-field-label`}>\n Default Data Source\n </label>\n <div className=\"solid-standard-autocomplete w-full\">\n <SolidAutocomplete\n disabled={!!data}\n value={defaultDataSourceField.selectedItem}\n suggestions={defaultDataSourceField.filteredItems}\n completeMethod={defaultDataSourceField.searchItems}\n onChange={defaultDataSourceField.handleChange}\n dropdown\n field=\"label\"\n className=\"w-full\"\n />\n </div>\n {isFormFieldValid(formik, \"defaultDataSource\") && (\n <p className={styles.fieldError}>{formik?.errors?.defaultDataSource?.toString()}</p>\n )}\n </div>\n </div>\n {!isCreateMode ? (\n <div className=\"field w-full px-2 pt-4\">\n <div className=\"solid-module-automap-panel\">\n <div className=\"solid-module-automap-copy\">\n <div className=\"solid-module-automap-eyebrow\">Legacy Table Mapping</div>\n <h4>Auto map datasource tables into this module</h4>\n <p>\n Open the datasource introspection workspace to inspect legacy tables, preview field mappings,\n review metadata JSON changes, and generate the supporting migration template for SolidX system fields.\n </p>\n <ul className=\"solid-module-automap-list\">\n <li>Review tables available on the selected datasource.</li>\n <li>Control which legacy columns are included in each mapping session.</li>\n <li>Preview the metadata JSON and migration output before saving.</li>\n </ul>\n </div>\n <div className=\"solid-module-automap-actions\">\n <SolidButton\n type=\"button\"\n size=\"sm\"\n onClick={() => router.push(`/admin/core/solid-core/modules/${data?.id}/datasource-introspection`)}\n >\n Auto Map Tables\n </SolidButton>\n </div>\n </div>\n </div>\n ) : null}\n </div>\n </SolidPanel>\n </div>\n </form>\n <SolidFormFooter params={params}></SolidFormFooter>\n </div>\n );\n\n return (\n <div className=\"solid-form-wrapper\">\n <div className=\"solid-form-section\" style={{ borderRight: params.embeded !== true ? '1px solid var(--primary-light-color)' : '' }} >\n {isCreateMode && (\n <div className=\"solid-form-header flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex flex-col gap-1\" />\n <div className=\"flex items-center gap-2\">\n <SolidButton\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n onClick={handleCancel}\n className=\"bg-[var(--primary-color-text)]\"\n >\n Cancel\n </SolidButton>\n {shouldShowGeneralSave && formik.dirty && (\n <SolidButton\n size=\"sm\"\n type=\"submit\"\n form=\"module-general-info-form\"\n onClick={() => showError()}\n >\n Save\n </SolidButton>\n )}\n </div>\n </div>\n )}\n\n {isCreateMode ? (\n generalInfoContent\n ) : (\n <div className=\"solid-module-form-workspace\">\n <SolidTabGroup\n value={activeWorkspaceTab}\n onValueChange={setActiveWorkspaceTab}\n className=\"solid-module-form-tabs\"\n listClassName=\"solid-module-form-tablist\"\n panelClassName=\"solid-module-form-tabpanel\"\n tabs={[\n {\n value: \"general\",\n label: <span className=\"solid-module-form-tab-label\">General Info</span>,\n content: generalInfoContent,\n },\n {\n value: \"explorer\",\n label: <span className=\"solid-module-form-tab-label\">Explorer</span>,\n content: <ModuleMetadataExplorer moduleName={data?.name} moduleId={data?.id} />,\n },\n ]}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default CreateModule;\n"]}
|
|
@@ -396,32 +396,8 @@ const CreateModule = ({ params, data }: any) => {
|
|
|
396
396
|
</div>
|
|
397
397
|
</div>
|
|
398
398
|
</div>
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
<div className="mt-3 flex flex-wrap -mx-2 -mt-2">
|
|
402
|
-
<div className="field w-full px-2 pt-2 pb-3 lg:w-1/2 lg:pb-0">
|
|
403
|
-
<div className={styles.fieldWrapper}>
|
|
404
|
-
<label htmlFor="defaultDataSource" className={`${styles.fieldLabel} form-field-label`}>
|
|
405
|
-
Default Data Source
|
|
406
|
-
</label>
|
|
407
|
-
<div className="solid-standard-autocomplete w-full">
|
|
408
|
-
<SolidAutocomplete
|
|
409
|
-
disabled={!!data}
|
|
410
|
-
value={defaultDataSourceField.selectedItem}
|
|
411
|
-
suggestions={defaultDataSourceField.filteredItems}
|
|
412
|
-
completeMethod={defaultDataSourceField.searchItems}
|
|
413
|
-
onChange={defaultDataSourceField.handleChange}
|
|
414
|
-
dropdown
|
|
415
|
-
field="label"
|
|
416
|
-
className="w-full"
|
|
417
|
-
/>
|
|
418
|
-
</div>
|
|
419
|
-
{isFormFieldValid(formik, "defaultDataSource") && (
|
|
420
|
-
<p className={styles.fieldError}>{formik?.errors?.defaultDataSource?.toString()}</p>
|
|
421
|
-
)}
|
|
422
|
-
</div>
|
|
423
|
-
</div>
|
|
424
|
-
<div className="field w-full px-2 pt-2 lg:w-1/2">
|
|
399
|
+
<div className="mt-4 flex flex-wrap -mx-2 -mt-2">
|
|
400
|
+
<div className="field w-full px-2 pt-2">
|
|
425
401
|
<div className={`${styles.fieldWrapper} relative`}>
|
|
426
402
|
<label htmlFor="menuIconUrl" className={`${styles.fieldLabel} form-field-label`}>
|
|
427
403
|
Menu Icon <small className="text-red-500 helper-text">(only svg, png and jpeg are allowed)</small>
|
|
@@ -487,6 +463,60 @@ const CreateModule = ({ params, data }: any) => {
|
|
|
487
463
|
</div>
|
|
488
464
|
</div>
|
|
489
465
|
</SolidPanel>
|
|
466
|
+
<SolidPanel header={"Datasource Configuration"} className="solid-column-panel mt-4">
|
|
467
|
+
<div className="mt-3 flex flex-wrap -mx-2 -mt-2">
|
|
468
|
+
<div className="field w-full px-2 pt-2">
|
|
469
|
+
<div className={styles.fieldWrapper}>
|
|
470
|
+
<label htmlFor="defaultDataSource" className={`${styles.fieldLabel} form-field-label`}>
|
|
471
|
+
Default Data Source
|
|
472
|
+
</label>
|
|
473
|
+
<div className="solid-standard-autocomplete w-full">
|
|
474
|
+
<SolidAutocomplete
|
|
475
|
+
disabled={!!data}
|
|
476
|
+
value={defaultDataSourceField.selectedItem}
|
|
477
|
+
suggestions={defaultDataSourceField.filteredItems}
|
|
478
|
+
completeMethod={defaultDataSourceField.searchItems}
|
|
479
|
+
onChange={defaultDataSourceField.handleChange}
|
|
480
|
+
dropdown
|
|
481
|
+
field="label"
|
|
482
|
+
className="w-full"
|
|
483
|
+
/>
|
|
484
|
+
</div>
|
|
485
|
+
{isFormFieldValid(formik, "defaultDataSource") && (
|
|
486
|
+
<p className={styles.fieldError}>{formik?.errors?.defaultDataSource?.toString()}</p>
|
|
487
|
+
)}
|
|
488
|
+
</div>
|
|
489
|
+
</div>
|
|
490
|
+
{!isCreateMode ? (
|
|
491
|
+
<div className="field w-full px-2 pt-4">
|
|
492
|
+
<div className="solid-module-automap-panel">
|
|
493
|
+
<div className="solid-module-automap-copy">
|
|
494
|
+
<div className="solid-module-automap-eyebrow">Legacy Table Mapping</div>
|
|
495
|
+
<h4>Auto map datasource tables into this module</h4>
|
|
496
|
+
<p>
|
|
497
|
+
Open the datasource introspection workspace to inspect legacy tables, preview field mappings,
|
|
498
|
+
review metadata JSON changes, and generate the supporting migration template for SolidX system fields.
|
|
499
|
+
</p>
|
|
500
|
+
<ul className="solid-module-automap-list">
|
|
501
|
+
<li>Review tables available on the selected datasource.</li>
|
|
502
|
+
<li>Control which legacy columns are included in each mapping session.</li>
|
|
503
|
+
<li>Preview the metadata JSON and migration output before saving.</li>
|
|
504
|
+
</ul>
|
|
505
|
+
</div>
|
|
506
|
+
<div className="solid-module-automap-actions">
|
|
507
|
+
<SolidButton
|
|
508
|
+
type="button"
|
|
509
|
+
size="sm"
|
|
510
|
+
onClick={() => router.push(`/admin/core/solid-core/modules/${data?.id}/datasource-introspection`)}
|
|
511
|
+
>
|
|
512
|
+
Auto Map Tables
|
|
513
|
+
</SolidButton>
|
|
514
|
+
</div>
|
|
515
|
+
</div>
|
|
516
|
+
</div>
|
|
517
|
+
) : null}
|
|
518
|
+
</div>
|
|
519
|
+
</SolidPanel>
|
|
490
520
|
</div>
|
|
491
521
|
</form>
|
|
492
522
|
<SolidFormFooter params={params}></SolidFormFooter>
|
|
@@ -533,17 +563,6 @@ const CreateModule = ({ params, data }: any) => {
|
|
|
533
563
|
className="solid-module-form-tabs"
|
|
534
564
|
listClassName="solid-module-form-tablist"
|
|
535
565
|
panelClassName="solid-module-form-tabpanel"
|
|
536
|
-
extra={(
|
|
537
|
-
<div className="solid-module-form-tab-extra">
|
|
538
|
-
<SolidButton
|
|
539
|
-
type="button"
|
|
540
|
-
size="sm"
|
|
541
|
-
onClick={() => router.push(`/admin/core/solid-core/modules/${data?.id}/datasource-introspection`)}
|
|
542
|
-
>
|
|
543
|
-
Auto Map Tables
|
|
544
|
-
</SolidButton>
|
|
545
|
-
</div>
|
|
546
|
-
)}
|
|
547
566
|
tabs={[
|
|
548
567
|
{
|
|
549
568
|
value: "general",
|
|
@@ -107,6 +107,6 @@ export var AdminTopHeader = function () {
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
};
|
|
110
|
-
return (_jsx("header", { className: "solid-admin-header", children: _jsxs("div", { className: "solid-admin-header-inner", children: [_jsx("button", { type: "button", className: "solid-admin-sidebar-trigger", onClick: triggerSidebar, "aria-label": "Toggle sidebar", children: _jsxs("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [_jsx("rect", { x: "1.5", y: "2", width: "13", height: "12", rx: "2", stroke: "currentColor" }), _jsx("path", { d: "M5.5 2V14", stroke: "currentColor" }), _jsx("rect", { x: "8", y: "5.25", width: "4.5", height: "5.5", rx: "0.9", stroke: "currentColor" })] }) }), _jsx("div", { className: "solid-admin-header-sep" }), _jsx("nav", { className: "solid-admin-breadcrumbs", "aria-label": "Breadcrumb", children: crumbs.map(function (crumb, index) { return (_jsxs("span", { className: "solid-admin-crumb", children: [index > 0 && _jsx("span", { className: "solid-admin-crumb-sep", children: "\u203A" }), index === 1 && showBack ? (_jsx("button", { type: "button", className: "solid-admin-crumb-link", onClick: function () { return handleBreadcrumbClick(index); }, style: { background: "none", border: "none", cursor: "pointer", color: "inherit", textDecoration: "underline" }, children: crumb })) : (_jsx("span", { className: "solid-bread-crum-text-wrapper", children: crumb }))] }, "".concat(crumb, "-").concat(index))); }) }), _jsx(AdminHeaderActions, { variant: "header" })] }) }));
|
|
110
|
+
return (_jsx("header", { className: "solid-admin-header", children: _jsxs("div", { className: "solid-admin-header-inner", children: [_jsx("button", { type: "button", className: "solid-admin-sidebar-trigger", onClick: triggerSidebar, "aria-label": "Toggle sidebar", children: _jsxs("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [_jsx("rect", { x: "1.5", y: "2", width: "13", height: "12", rx: "2", stroke: "currentColor" }), _jsx("path", { d: "M5.5 2V14", stroke: "currentColor" }), _jsx("rect", { x: "8", y: "5.25", width: "4.5", height: "5.5", rx: "0.9", stroke: "currentColor" })] }) }), _jsx("div", { className: "solid-admin-header-sep" }), _jsx("nav", { className: "solid-admin-breadcrumbs", "aria-label": "Breadcrumb", children: crumbs.map(function (crumb, index) { return (_jsxs("span", { className: "solid-admin-crumb", children: [index > 0 && _jsx("span", { className: "solid-admin-crumb-sep", children: "\u203A" }), index === 1 && showBack ? (_jsx("button", { type: "button", className: "px-0 solid-admin-crumb-link", onClick: function () { return handleBreadcrumbClick(index); }, style: { background: "none", border: "none", cursor: "pointer", color: "inherit", textDecoration: "underline", fontFamily: 'inherit' }, children: crumb })) : (_jsx("span", { className: "solid-bread-crum-text-wrapper", children: crumb }))] }, "".concat(crumb, "-").concat(index))); }) }), _jsx(AdminHeaderActions, { variant: "header" })] }) }));
|
|
111
111
|
};
|
|
112
112
|
//# sourceMappingURL=AdminTopHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminTopHeader.js","sourceRoot":"","sources":["../../../src/components/layout/AdminTopHeader.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useMemo } from \"react\";\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { useSearchParams } from \"../../hooks/useSearchParams\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useGetSolidActionByIdQuery } from \"../../redux/api/solidActionApi\";\nimport { useGetSolidSettingsQuery } from \"../../redux/api/solidSettingsApi\";\nimport { LayoutContext } from \"./context/layoutcontext\";\nimport { enterStudioMode } from \"../../redux/features/solidStudioSlice\";\nimport { hasAnyRole } from \"../../helpers/rolesHelper\";\nimport { getSettingsMap } from \"../../helpers/settingsPayload\";\nimport { env } from \"../../adapters/env\";\nimport { AdminHeaderActions, StudioSparkleIcon } from \"./AdminHeaderActions\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useSession } from \"../../hooks/useSession\";\n\nconst SIDEBAR_TOGGLE_EVENT = \"solidx:sidebar-toggle\";\n\nconst toLabel = (value: string) =>\n decodeURIComponent(value)\n .replace(/[-_]/g, \" \")\n .replace(/\\b\\w/g, (m) => m.toUpperCase());\n\nexport const AdminTopHeader = () => {\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const router = useRouter();\n const dispatch = useDispatch();\n const { toggleThemeMode } = useContext(LayoutContext);\n const { data: session } = useSession();\n const { data: solidSettingsData } = useGetSolidSettingsQuery(undefined);\n const user = session?.user;\n const isAdmin = hasAnyRole(user?.roles, [\"Admin\"]);\n const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);\n const isDev = env(\"VITE_SOLIDX_ENV\") === \"dev\";\n const settingsMap = useMemo(() => getSettingsMap(solidSettingsData), [solidSettingsData]);\n const isDarkModeEnabled = settingsMap?.enableDarkMode === true || settingsMap?.enableDarkMode === \"true\";\n\n // We treat actionId as the source of truth for breadcrumb labels.\n // If present, we resolve module/model/action via action-metadata API\n // so breadcrumbs are consistent across list/form/tree/kanban pages.\n const actionId = searchParams.get(\"actionId\");\n const { data: actionResponse } = useGetSolidActionByIdQuery(actionId as string, {\n skip: !actionId,\n });\n\n const crumbs = useMemo(() => {\n // API response shapes vary by adapter layer, so normalize defensively.\n const actionData = actionResponse?.data?.data ?? actionResponse?.data ?? actionResponse;\n const moduleFromApi = actionData?.module?.displayName || actionData?.module?.name;\n const modelFromApi = actionData?.model?.displayName || actionData?.model?.name;\n const actionFromApi = actionData?.displayName || actionData?.name;\n const actionDataId = actionData?.id != null ? String(actionData.id) : null;\n const hasMatchingActionData = Boolean(actionId) && actionDataId === actionId;\n\n // Priority 1: exact business breadcrumb contract requested:\n // <module> > <model> > <action>.\n // We only trust API crumbs when they belong to the current URL's actionId.\n // This avoids stale list breadcrumbs bleeding into form routes that do not\n // carry actionId in their query string.\n if (hasMatchingActionData && (moduleFromApi || modelFromApi || actionFromApi)) {\n return [moduleFromApi, modelFromApi, actionFromApi].filter(Boolean);\n }\n\n const segments = pathname.split(\"/\").filter(Boolean);\n // Priority 2: derive from route segments when API data is unavailable.\n // This is intentionally ahead of query fallback so form pages don't\n // inherit stale list query labels after list -> form navigation.\n if (segments[0] === \"admin\" && segments[1] === \"core\") {\n const moduleName = segments[2];\n const modelName = segments[3];\n const viewName = segments[4];\n const next = [\n moduleName ? toLabel(moduleName) : null,\n modelFromApi ? decodeURIComponent(modelFromApi) : modelName ? toLabel(modelName) : null,\n viewName ? toLabel(viewName) : null,\n ].filter(Boolean) as string[];\n return next.length ? next : [\"Admin\"];\n }\n\n const menuItemName = searchParams.get(\"menuItemName\");\n const actionName = searchParams.get(\"actionName\");\n\n // Priority 3: legacy URL-query fallback for older links/pages.\n if (menuItemName || actionName) {\n return [menuItemName, actionName].filter(Boolean).map((item) => toLabel(item!));\n }\n\n return [\"Admin\"];\n }, [actionId, actionResponse, pathname, searchParams]);\n\n const showBack = /\\/admin\\/core\\/[^/]+\\/[^/]+\\/form\\/[^/]+/.test(pathname);\n\n const triggerSidebar = () => {\n window.dispatchEvent(new CustomEvent(SIDEBAR_TOGGLE_EVENT));\n };\n\n const handleBreadcrumbClick = (crumbIndex: number) => {\n // When on a form view, clicking the model name (second crumb) should navigate back to list\n // Index 1 is the model name in a breadcrumb like: Module > Model > Action\n if (crumbIndex === 1 && showBack) {\n if (typeof window !== \"undefined\") {\n // First, try to use the full stored URL (preserves all query params)\n const storedFullUrl = sessionStorage.getItem(\"fromViewUrl\");\n if (storedFullUrl) {\n router.push(storedFullUrl);\n return;\n }\n }\n \n // Fallback: construct URL from current path and stored view\n const segments = pathname.split(\"/\").filter(Boolean);\n if (segments[0] === \"admin\" && segments[1] === \"core\") {\n const moduleName = segments[2];\n const modelName = segments[3];\n const fromView = typeof window !== \"undefined\" \n ? sessionStorage.getItem(\"fromView\") || \"list\" \n : \"list\";\n router.push(`/admin/core/${moduleName}/${modelName}/${fromView}`);\n }\n }\n };\n\n return (\n <header className=\"solid-admin-header\">\n <div className=\"solid-admin-header-inner\">\n <button\n type=\"button\"\n className=\"solid-admin-sidebar-trigger\"\n onClick={triggerSidebar}\n aria-label=\"Toggle sidebar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1.5\" y=\"2\" width=\"13\" height=\"12\" rx=\"2\" stroke=\"currentColor\" />\n <path d=\"M5.5 2V14\" stroke=\"currentColor\" />\n <rect x=\"8\" y=\"5.25\" width=\"4.5\" height=\"5.5\" rx=\"0.9\" stroke=\"currentColor\" />\n </svg>\n </button>\n\n <div className=\"solid-admin-header-sep\" />\n\n <nav className=\"solid-admin-breadcrumbs\" aria-label=\"Breadcrumb\">\n {crumbs.map((crumb, index) => (\n <span key={`${crumb}-${index}`} className=\"solid-admin-crumb\">\n {index > 0 && <span className=\"solid-admin-crumb-sep\">›</span>}\n {index === 1 && showBack ? (\n <button\n type=\"button\"\n className=\"solid-admin-crumb-link\"\n onClick={() => handleBreadcrumbClick(index)}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: \"inherit\", textDecoration: \"underline\" }}\n >\n {crumb}\n </button>\n ) : (\n <span className=\"solid-bread-crum-text-wrapper\">{crumb}</span>\n )}\n </span>\n ))}\n </nav>\n\n {/* <div className=\"solid-admin-header-actions\">\n {isAdmin && isDev && !isStudioMode && (\n <button\n type=\"button\"\n className=\"solid-studio-trigger-btn\"\n onClick={() => { dispatch(enterStudioMode()); router.push(\"/studio\"); }}\n title=\"Enter SolidX Studio\"\n aria-label=\"Enter SolidX Studio\"\n >\n <StudioSparkleIcon />\n <span className=\"solid-studio-trigger-label\">Studio</span>\n </button>\n )}\n\n {isDarkModeEnabled && (\n <button\n type=\"button\"\n className=\"solid-admin-theme-toggle\"\n onClick={toggleThemeMode}\n aria-label=\"Toggle theme\"\n title=\"Toggle theme\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 3l0 18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 9l4.65 -4.65\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 14.3l7.37 -7.37\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 19.6l8.85 -8.85\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n <span className=\"solid-sr-only\">Toggle theme</span>\n </button>\n )}\n\n {showBack && (\n <button\n type=\"button\"\n className=\"solid-admin-back-btn\"\n onClick={() => router.back()}\n aria-label=\"Go back\"\n >\n Back\n </button>\n )}\n </div> */}\n <AdminHeaderActions variant=\"header\" />\n </div>\n </header>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"AdminTopHeader.js","sourceRoot":"","sources":["../../../src/components/layout/AdminTopHeader.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useMemo } from \"react\";\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { useSearchParams } from \"../../hooks/useSearchParams\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useGetSolidActionByIdQuery } from \"../../redux/api/solidActionApi\";\nimport { useGetSolidSettingsQuery } from \"../../redux/api/solidSettingsApi\";\nimport { LayoutContext } from \"./context/layoutcontext\";\nimport { enterStudioMode } from \"../../redux/features/solidStudioSlice\";\nimport { hasAnyRole } from \"../../helpers/rolesHelper\";\nimport { getSettingsMap } from \"../../helpers/settingsPayload\";\nimport { env } from \"../../adapters/env\";\nimport { AdminHeaderActions, StudioSparkleIcon } from \"./AdminHeaderActions\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useSession } from \"../../hooks/useSession\";\n\nconst SIDEBAR_TOGGLE_EVENT = \"solidx:sidebar-toggle\";\n\nconst toLabel = (value: string) =>\n decodeURIComponent(value)\n .replace(/[-_]/g, \" \")\n .replace(/\\b\\w/g, (m) => m.toUpperCase());\n\nexport const AdminTopHeader = () => {\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const router = useRouter();\n const dispatch = useDispatch();\n const { toggleThemeMode } = useContext(LayoutContext);\n const { data: session } = useSession();\n const { data: solidSettingsData } = useGetSolidSettingsQuery(undefined);\n const user = session?.user;\n const isAdmin = hasAnyRole(user?.roles, [\"Admin\"]);\n const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);\n const isDev = env(\"VITE_SOLIDX_ENV\") === \"dev\";\n const settingsMap = useMemo(() => getSettingsMap(solidSettingsData), [solidSettingsData]);\n const isDarkModeEnabled = settingsMap?.enableDarkMode === true || settingsMap?.enableDarkMode === \"true\";\n\n // We treat actionId as the source of truth for breadcrumb labels.\n // If present, we resolve module/model/action via action-metadata API\n // so breadcrumbs are consistent across list/form/tree/kanban pages.\n const actionId = searchParams.get(\"actionId\");\n const { data: actionResponse } = useGetSolidActionByIdQuery(actionId as string, {\n skip: !actionId,\n });\n\n const crumbs = useMemo(() => {\n // API response shapes vary by adapter layer, so normalize defensively.\n const actionData = actionResponse?.data?.data ?? actionResponse?.data ?? actionResponse;\n const moduleFromApi = actionData?.module?.displayName || actionData?.module?.name;\n const modelFromApi = actionData?.model?.displayName || actionData?.model?.name;\n const actionFromApi = actionData?.displayName || actionData?.name;\n const actionDataId = actionData?.id != null ? String(actionData.id) : null;\n const hasMatchingActionData = Boolean(actionId) && actionDataId === actionId;\n\n // Priority 1: exact business breadcrumb contract requested:\n // <module> > <model> > <action>.\n // We only trust API crumbs when they belong to the current URL's actionId.\n // This avoids stale list breadcrumbs bleeding into form routes that do not\n // carry actionId in their query string.\n if (hasMatchingActionData && (moduleFromApi || modelFromApi || actionFromApi)) {\n return [moduleFromApi, modelFromApi, actionFromApi].filter(Boolean);\n }\n\n const segments = pathname.split(\"/\").filter(Boolean);\n // Priority 2: derive from route segments when API data is unavailable.\n // This is intentionally ahead of query fallback so form pages don't\n // inherit stale list query labels after list -> form navigation.\n if (segments[0] === \"admin\" && segments[1] === \"core\") {\n const moduleName = segments[2];\n const modelName = segments[3];\n const viewName = segments[4];\n const next = [\n moduleName ? toLabel(moduleName) : null,\n modelFromApi ? decodeURIComponent(modelFromApi) : modelName ? toLabel(modelName) : null,\n viewName ? toLabel(viewName) : null,\n ].filter(Boolean) as string[];\n return next.length ? next : [\"Admin\"];\n }\n\n const menuItemName = searchParams.get(\"menuItemName\");\n const actionName = searchParams.get(\"actionName\");\n\n // Priority 3: legacy URL-query fallback for older links/pages.\n if (menuItemName || actionName) {\n return [menuItemName, actionName].filter(Boolean).map((item) => toLabel(item!));\n }\n\n return [\"Admin\"];\n }, [actionId, actionResponse, pathname, searchParams]);\n\n const showBack = /\\/admin\\/core\\/[^/]+\\/[^/]+\\/form\\/[^/]+/.test(pathname);\n\n const triggerSidebar = () => {\n window.dispatchEvent(new CustomEvent(SIDEBAR_TOGGLE_EVENT));\n };\n\n const handleBreadcrumbClick = (crumbIndex: number) => {\n // When on a form view, clicking the model name (second crumb) should navigate back to list\n // Index 1 is the model name in a breadcrumb like: Module > Model > Action\n if (crumbIndex === 1 && showBack) {\n if (typeof window !== \"undefined\") {\n // First, try to use the full stored URL (preserves all query params)\n const storedFullUrl = sessionStorage.getItem(\"fromViewUrl\");\n if (storedFullUrl) {\n router.push(storedFullUrl);\n return;\n }\n }\n \n // Fallback: construct URL from current path and stored view\n const segments = pathname.split(\"/\").filter(Boolean);\n if (segments[0] === \"admin\" && segments[1] === \"core\") {\n const moduleName = segments[2];\n const modelName = segments[3];\n const fromView = typeof window !== \"undefined\" \n ? sessionStorage.getItem(\"fromView\") || \"list\" \n : \"list\";\n router.push(`/admin/core/${moduleName}/${modelName}/${fromView}`);\n }\n }\n };\n\n return (\n <header className=\"solid-admin-header\">\n <div className=\"solid-admin-header-inner\">\n <button\n type=\"button\"\n className=\"solid-admin-sidebar-trigger\"\n onClick={triggerSidebar}\n aria-label=\"Toggle sidebar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1.5\" y=\"2\" width=\"13\" height=\"12\" rx=\"2\" stroke=\"currentColor\" />\n <path d=\"M5.5 2V14\" stroke=\"currentColor\" />\n <rect x=\"8\" y=\"5.25\" width=\"4.5\" height=\"5.5\" rx=\"0.9\" stroke=\"currentColor\" />\n </svg>\n </button>\n\n <div className=\"solid-admin-header-sep\" />\n\n <nav className=\"solid-admin-breadcrumbs\" aria-label=\"Breadcrumb\">\n {crumbs.map((crumb, index) => (\n <span key={`${crumb}-${index}`} className=\"solid-admin-crumb\">\n {index > 0 && <span className=\"solid-admin-crumb-sep\">›</span>}\n {index === 1 && showBack ? (\n <button\n type=\"button\"\n className=\"px-0 solid-admin-crumb-link\"\n onClick={() => handleBreadcrumbClick(index)}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: \"inherit\", textDecoration: \"underline\", fontFamily: 'inherit' }}\n >\n {crumb}\n </button>\n ) : (\n <span className=\"solid-bread-crum-text-wrapper\">{crumb}</span>\n )}\n </span>\n ))}\n </nav>\n\n {/* <div className=\"solid-admin-header-actions\">\n {isAdmin && isDev && !isStudioMode && (\n <button\n type=\"button\"\n className=\"solid-studio-trigger-btn\"\n onClick={() => { dispatch(enterStudioMode()); router.push(\"/studio\"); }}\n title=\"Enter SolidX Studio\"\n aria-label=\"Enter SolidX Studio\"\n >\n <StudioSparkleIcon />\n <span className=\"solid-studio-trigger-label\">Studio</span>\n </button>\n )}\n\n {isDarkModeEnabled && (\n <button\n type=\"button\"\n className=\"solid-admin-theme-toggle\"\n onClick={toggleThemeMode}\n aria-label=\"Toggle theme\"\n title=\"Toggle theme\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 3l0 18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 9l4.65 -4.65\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 14.3l7.37 -7.37\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 19.6l8.85 -8.85\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n <span className=\"solid-sr-only\">Toggle theme</span>\n </button>\n )}\n\n {showBack && (\n <button\n type=\"button\"\n className=\"solid-admin-back-btn\"\n onClick={() => router.back()}\n aria-label=\"Go back\"\n >\n Back\n </button>\n )}\n </div> */}\n <AdminHeaderActions variant=\"header\" />\n </div>\n </header>\n );\n};\n"]}
|
|
@@ -145,9 +145,9 @@ export const AdminTopHeader = () => {
|
|
|
145
145
|
{index === 1 && showBack ? (
|
|
146
146
|
<button
|
|
147
147
|
type="button"
|
|
148
|
-
className="solid-admin-crumb-link"
|
|
148
|
+
className="px-0 solid-admin-crumb-link"
|
|
149
149
|
onClick={() => handleBreadcrumbClick(index)}
|
|
150
|
-
style={{ background: "none", border: "none", cursor: "pointer", color: "inherit", textDecoration: "underline" }}
|
|
150
|
+
style={{ background: "none", border: "none", cursor: "pointer", color: "inherit", textDecoration: "underline", fontFamily: 'inherit' }}
|
|
151
151
|
>
|
|
152
152
|
{crumb}
|
|
153
153
|
</button>
|
|
@@ -12,7 +12,8 @@ type SolidSelectProps = {
|
|
|
12
12
|
}) => void;
|
|
13
13
|
id?: string;
|
|
14
14
|
native?: boolean;
|
|
15
|
+
menuPlacement?: "auto" | "top" | "bottom";
|
|
15
16
|
};
|
|
16
|
-
export declare function SolidSelect({ value, options, optionLabel, optionValue, placeholder, className, disabled, onChange, id, native, }: SolidSelectProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export declare function SolidSelect({ value, options, optionLabel, optionValue, placeholder, className, disabled, onChange, id, native, menuPlacement, }: SolidSelectProps): import("react/jsx-runtime").JSX.Element;
|
|
17
18
|
export {};
|
|
18
19
|
//# sourceMappingURL=SolidSelect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidSelect.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidSelect.tsx"],"names":[],"mappings":"AAGA,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE7C,KAAK,gBAAgB,GAAG;IACtB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,GAAG,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SolidSelect.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidSelect.tsx"],"names":[],"mappings":"AAGA,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE7C,KAAK,gBAAgB,GAAG;IACtB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,GAAG,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;CAC3C,CAAC;AAMF,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,OAAY,EACZ,WAAqB,EACrB,WAAqB,EACrB,WAAW,EACX,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,EAAE,EACF,MAAa,EACb,aAAsB,GACvB,EAAE,gBAAgB,2CA2IlB"}
|
|
@@ -9,9 +9,9 @@ function cx() {
|
|
|
9
9
|
return parts.filter(Boolean).join(" ");
|
|
10
10
|
}
|
|
11
11
|
export function SolidSelect(_a) {
|
|
12
|
-
var value = _a.value, _b = _a.options, options = _b === void 0 ? [] : _b, _c = _a.optionLabel, optionLabel = _c === void 0 ? "label" : _c, _d = _a.optionValue, optionValue = _d === void 0 ? "value" : _d, placeholder = _a.placeholder, className = _a.className, disabled = _a.disabled, onChange = _a.onChange, id = _a.id, _e = _a.native, native = _e === void 0 ? true : _e;
|
|
13
|
-
var
|
|
14
|
-
var
|
|
12
|
+
var value = _a.value, _b = _a.options, options = _b === void 0 ? [] : _b, _c = _a.optionLabel, optionLabel = _c === void 0 ? "label" : _c, _d = _a.optionValue, optionValue = _d === void 0 ? "value" : _d, placeholder = _a.placeholder, className = _a.className, disabled = _a.disabled, onChange = _a.onChange, id = _a.id, _e = _a.native, native = _e === void 0 ? true : _e, _f = _a.menuPlacement, menuPlacement = _f === void 0 ? "auto" : _f;
|
|
13
|
+
var _g = React.useState(false), open = _g[0], setOpen = _g[1];
|
|
14
|
+
var _h = React.useState(false), openUpward = _h[0], setOpenUpward = _h[1];
|
|
15
15
|
var rootRef = React.useRef(null);
|
|
16
16
|
var menuRef = React.useRef(null);
|
|
17
17
|
var normalized = options.map(function (option, index) {
|
|
@@ -51,6 +51,14 @@ export function SolidSelect(_a) {
|
|
|
51
51
|
React.useLayoutEffect(function () {
|
|
52
52
|
if (!open || native || !rootRef.current || !menuRef.current)
|
|
53
53
|
return;
|
|
54
|
+
if (menuPlacement === "top") {
|
|
55
|
+
setOpenUpward(true);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (menuPlacement === "bottom") {
|
|
59
|
+
setOpenUpward(false);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
54
62
|
var rootRect = rootRef.current.getBoundingClientRect();
|
|
55
63
|
var menuHeight = menuRef.current.offsetHeight;
|
|
56
64
|
var viewportHeight = window.innerHeight;
|
|
@@ -58,7 +66,7 @@ export function SolidSelect(_a) {
|
|
|
58
66
|
var spaceAbove = rootRect.top;
|
|
59
67
|
var needsOpenUpward = spaceBelow < menuHeight + 8 && spaceAbove > spaceBelow;
|
|
60
68
|
setOpenUpward(needsOpenUpward);
|
|
61
|
-
}, [open, native, options.length]);
|
|
69
|
+
}, [open, native, options.length, menuPlacement]);
|
|
62
70
|
if (!native) {
|
|
63
71
|
return (_jsxs("div", { ref: rootRef, className: cx("solid-select-wrap", "solid-select-wrap-custom", className), children: [_jsxs("button", { id: id, type: "button", className: "solid-select solid-select-trigger", disabled: disabled, "aria-haspopup": "listbox", "aria-expanded": open, onClick: function () {
|
|
64
72
|
if (disabled)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidSelect.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidSelect.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { ChevronDown } from \"lucide-react\";\n\ntype SolidSelectOption = Record<string, any>;\n\ntype SolidSelectProps = {\n value?: any;\n options?: SolidSelectOption[];\n optionLabel?: string;\n optionValue?: string;\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n onChange?: (event: { value: any }) => void;\n id?: string;\n native?: boolean;\n};\n\nfunction cx(...parts: Array<string | false | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nexport function SolidSelect({\n value,\n options = [],\n optionLabel = \"label\",\n optionValue = \"value\",\n placeholder,\n className,\n disabled,\n onChange,\n id,\n native = true,\n}: SolidSelectProps) {\n const [open, setOpen] = React.useState(false);\n const [openUpward, setOpenUpward] = React.useState(false);\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const menuRef = React.useRef<HTMLDivElement | null>(null);\n const normalized = options.map((option, index) => ({\n key: String(index),\n label: option?.[optionLabel] ?? \"\",\n value: option?.[optionValue],\n }));\n\n const selectedIndex = normalized.findIndex((item) => item.value === value);\n const selectedKey = selectedIndex >= 0 ? normalized[selectedIndex].key : \"\";\n const selectedOption = selectedIndex >= 0 ? normalized[selectedIndex] : null;\n\n React.useEffect(() => {\n if (!open) return;\n\n const handlePointerDown = (event: MouseEvent | TouchEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handlePointerDown);\n document.addEventListener(\"touchstart\", handlePointerDown);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n document.removeEventListener(\"mousedown\", handlePointerDown);\n document.removeEventListener(\"touchstart\", handlePointerDown);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [open]);\n\n React.useLayoutEffect(() => {\n if (!open || native || !rootRef.current || !menuRef.current) return;\n\n const rootRect = rootRef.current.getBoundingClientRect();\n const menuHeight = menuRef.current.offsetHeight;\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rootRect.bottom;\n const spaceAbove = rootRect.top;\n const needsOpenUpward = spaceBelow < menuHeight + 8 && spaceAbove > spaceBelow;\n\n setOpenUpward(needsOpenUpward);\n }, [open, native, options.length]);\n\n if (!native) {\n return (\n <div ref={rootRef} className={cx(\"solid-select-wrap\", \"solid-select-wrap-custom\", className)}>\n <button\n id={id}\n type=\"button\"\n className=\"solid-select solid-select-trigger\"\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => {\n if (disabled) return;\n setOpen((prev) => !prev);\n }}\n >\n <span className={cx(\"solid-select-trigger-label\", !selectedOption && \"solid-select-placeholder\")}>\n {selectedOption?.label || placeholder || \"Select\"}\n </span>\n <span className=\"solid-select-icon\" aria-hidden=\"true\">\n <ChevronDown size={14} />\n </span>\n </button>\n {open ? (\n <div\n ref={menuRef}\n className={cx(\"solid-select-menu\", openUpward && \"solid-select-menu-top\")}\n role=\"listbox\"\n >\n {normalized.map((item) => (\n <button\n key={item.key}\n type=\"button\"\n role=\"option\"\n className={cx(\"solid-select-menu-item\", item.value === value && \"is-selected\")}\n aria-selected={item.value === value}\n onClick={() => {\n onChange?.({ value: item.value });\n setOpen(false);\n }}\n >\n {item.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n }\n\n return (\n <div className={cx(\"solid-select-wrap\", className)}>\n <select\n id={id}\n className=\"solid-select\"\n value={selectedKey}\n disabled={disabled}\n onChange={(event) => {\n const next = normalized.find((item) => item.key === event.target.value);\n onChange?.({ value: next?.value });\n }}\n >\n <option value=\"\" disabled>\n {placeholder || \"Select\"}\n </option>\n {normalized.map((item) => (\n <option key={item.key} value={item.key}>\n {item.label}\n </option>\n ))}\n </select>\n <span className=\"solid-select-icon\" aria-hidden=\"true\">\n <ChevronDown size={14} />\n </span>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SolidSelect.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidSelect.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { ChevronDown } from \"lucide-react\";\n\ntype SolidSelectOption = Record<string, any>;\n\ntype SolidSelectProps = {\n value?: any;\n options?: SolidSelectOption[];\n optionLabel?: string;\n optionValue?: string;\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n onChange?: (event: { value: any }) => void;\n id?: string;\n native?: boolean;\n menuPlacement?: \"auto\" | \"top\" | \"bottom\";\n};\n\nfunction cx(...parts: Array<string | false | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nexport function SolidSelect({\n value,\n options = [],\n optionLabel = \"label\",\n optionValue = \"value\",\n placeholder,\n className,\n disabled,\n onChange,\n id,\n native = true,\n menuPlacement = \"auto\",\n}: SolidSelectProps) {\n const [open, setOpen] = React.useState(false);\n const [openUpward, setOpenUpward] = React.useState(false);\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const menuRef = React.useRef<HTMLDivElement | null>(null);\n const normalized = options.map((option, index) => ({\n key: String(index),\n label: option?.[optionLabel] ?? \"\",\n value: option?.[optionValue],\n }));\n\n const selectedIndex = normalized.findIndex((item) => item.value === value);\n const selectedKey = selectedIndex >= 0 ? normalized[selectedIndex].key : \"\";\n const selectedOption = selectedIndex >= 0 ? normalized[selectedIndex] : null;\n\n React.useEffect(() => {\n if (!open) return;\n\n const handlePointerDown = (event: MouseEvent | TouchEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handlePointerDown);\n document.addEventListener(\"touchstart\", handlePointerDown);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n document.removeEventListener(\"mousedown\", handlePointerDown);\n document.removeEventListener(\"touchstart\", handlePointerDown);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [open]);\n\n React.useLayoutEffect(() => {\n if (!open || native || !rootRef.current || !menuRef.current) return;\n\n if (menuPlacement === \"top\") {\n setOpenUpward(true);\n return;\n }\n\n if (menuPlacement === \"bottom\") {\n setOpenUpward(false);\n return;\n }\n\n const rootRect = rootRef.current.getBoundingClientRect();\n const menuHeight = menuRef.current.offsetHeight;\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rootRect.bottom;\n const spaceAbove = rootRect.top;\n const needsOpenUpward = spaceBelow < menuHeight + 8 && spaceAbove > spaceBelow;\n\n setOpenUpward(needsOpenUpward);\n }, [open, native, options.length, menuPlacement]);\n\n if (!native) {\n return (\n <div ref={rootRef} className={cx(\"solid-select-wrap\", \"solid-select-wrap-custom\", className)}>\n <button\n id={id}\n type=\"button\"\n className=\"solid-select solid-select-trigger\"\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => {\n if (disabled) return;\n setOpen((prev) => !prev);\n }}\n >\n <span className={cx(\"solid-select-trigger-label\", !selectedOption && \"solid-select-placeholder\")}>\n {selectedOption?.label || placeholder || \"Select\"}\n </span>\n <span className=\"solid-select-icon\" aria-hidden=\"true\">\n <ChevronDown size={14} />\n </span>\n </button>\n {open ? (\n <div\n ref={menuRef}\n className={cx(\"solid-select-menu\", openUpward && \"solid-select-menu-top\")}\n role=\"listbox\"\n >\n {normalized.map((item) => (\n <button\n key={item.key}\n type=\"button\"\n role=\"option\"\n className={cx(\"solid-select-menu-item\", item.value === value && \"is-selected\")}\n aria-selected={item.value === value}\n onClick={() => {\n onChange?.({ value: item.value });\n setOpen(false);\n }}\n >\n {item.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n }\n\n return (\n <div className={cx(\"solid-select-wrap\", className)}>\n <select\n id={id}\n className=\"solid-select\"\n value={selectedKey}\n disabled={disabled}\n onChange={(event) => {\n const next = normalized.find((item) => item.key === event.target.value);\n onChange?.({ value: next?.value });\n }}\n >\n <option value=\"\" disabled>\n {placeholder || \"Select\"}\n </option>\n {normalized.map((item) => (\n <option key={item.key} value={item.key}>\n {item.label}\n </option>\n ))}\n </select>\n <span className=\"solid-select-icon\" aria-hidden=\"true\">\n <ChevronDown size={14} />\n </span>\n </div>\n );\n}\n"]}
|
|
@@ -14,6 +14,7 @@ type SolidSelectProps = {
|
|
|
14
14
|
onChange?: (event: { value: any }) => void;
|
|
15
15
|
id?: string;
|
|
16
16
|
native?: boolean;
|
|
17
|
+
menuPlacement?: "auto" | "top" | "bottom";
|
|
17
18
|
};
|
|
18
19
|
|
|
19
20
|
function cx(...parts: Array<string | false | undefined>) {
|
|
@@ -31,6 +32,7 @@ export function SolidSelect({
|
|
|
31
32
|
onChange,
|
|
32
33
|
id,
|
|
33
34
|
native = true,
|
|
35
|
+
menuPlacement = "auto",
|
|
34
36
|
}: SolidSelectProps) {
|
|
35
37
|
const [open, setOpen] = React.useState(false);
|
|
36
38
|
const [openUpward, setOpenUpward] = React.useState(false);
|
|
@@ -75,6 +77,16 @@ export function SolidSelect({
|
|
|
75
77
|
React.useLayoutEffect(() => {
|
|
76
78
|
if (!open || native || !rootRef.current || !menuRef.current) return;
|
|
77
79
|
|
|
80
|
+
if (menuPlacement === "top") {
|
|
81
|
+
setOpenUpward(true);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (menuPlacement === "bottom") {
|
|
86
|
+
setOpenUpward(false);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
78
90
|
const rootRect = rootRef.current.getBoundingClientRect();
|
|
79
91
|
const menuHeight = menuRef.current.offsetHeight;
|
|
80
92
|
const viewportHeight = window.innerHeight;
|
|
@@ -83,7 +95,7 @@ export function SolidSelect({
|
|
|
83
95
|
const needsOpenUpward = spaceBelow < menuHeight + 8 && spaceAbove > spaceBelow;
|
|
84
96
|
|
|
85
97
|
setOpenUpward(needsOpenUpward);
|
|
86
|
-
}, [open, native, options.length]);
|
|
98
|
+
}, [open, native, options.length, menuPlacement]);
|
|
87
99
|
|
|
88
100
|
if (!native) {
|
|
89
101
|
return (
|