@solidxai/core-ui 0.1.5-beta.10 → 0.1.5-beta.12
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/GoogleAuthChecking.d.ts.map +1 -1
- package/dist/components/auth/GoogleAuthChecking.js +10 -10
- package/dist/components/auth/GoogleAuthChecking.js.map +1 -1
- package/dist/components/auth/GoogleAuthChecking.tsx +8 -9
- package/dist/components/auth/SolidChangeForcePassword.d.ts.map +1 -1
- package/dist/components/auth/SolidChangeForcePassword.js +9 -10
- package/dist/components/auth/SolidChangeForcePassword.js.map +1 -1
- package/dist/components/auth/SolidChangeForcePassword.tsx +6 -9
- package/dist/components/auth/SolidForgotPassword.d.ts.map +1 -1
- package/dist/components/auth/SolidForgotPassword.js +8 -8
- package/dist/components/auth/SolidForgotPassword.js.map +1 -1
- package/dist/components/auth/SolidForgotPassword.tsx +6 -8
- package/dist/components/auth/SolidInitialLoginOtp.d.ts.map +1 -1
- package/dist/components/auth/SolidInitialLoginOtp.js +57 -57
- package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
- package/dist/components/auth/SolidInitialLoginOtp.tsx +10 -11
- package/dist/components/auth/SolidInitiateRegisterOtp.d.ts.map +1 -1
- package/dist/components/auth/SolidInitiateRegisterOtp.js +57 -57
- package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
- package/dist/components/auth/SolidInitiateRegisterOtp.tsx +10 -11
- package/dist/components/auth/SolidLogin.d.ts.map +1 -1
- package/dist/components/auth/SolidLogin.js +12 -12
- package/dist/components/auth/SolidLogin.js.map +1 -1
- package/dist/components/auth/SolidLogin.tsx +11 -16
- package/dist/components/auth/SolidOTPVerify.d.ts +3 -0
- package/dist/components/auth/SolidOTPVerify.d.ts.map +1 -0
- package/dist/components/auth/SolidOTPVerify.js +67 -0
- package/dist/components/auth/SolidOTPVerify.js.map +1 -0
- package/dist/components/auth/SolidOTPVerify.tsx +133 -0
- package/dist/components/auth/SolidRegister.d.ts.map +1 -1
- package/dist/components/auth/SolidRegister.js +19 -19
- package/dist/components/auth/SolidRegister.js.map +1 -1
- package/dist/components/auth/SolidRegister.tsx +18 -23
- package/dist/components/auth/SolidResetPassword.d.ts.map +1 -1
- package/dist/components/auth/SolidResetPassword.js +15 -15
- package/dist/components/auth/SolidResetPassword.js.map +1 -1
- package/dist/components/auth/SolidResetPassword.tsx +7 -8
- package/dist/components/common/AuthBanner.js.map +1 -1
- package/dist/components/common/GeneralSettings.d.ts.map +1 -1
- package/dist/components/common/GeneralSettings.js +87 -120
- package/dist/components/common/GeneralSettings.js.map +1 -1
- package/dist/components/common/GeneralSettings.tsx +12 -42
- package/dist/components/common/GlobalToast.d.ts +2 -0
- package/dist/components/common/GlobalToast.d.ts.map +1 -0
- package/dist/components/common/GlobalToast.js +25 -0
- package/dist/components/common/GlobalToast.js.map +1 -0
- package/dist/components/common/GlobalToast.tsx +25 -0
- package/dist/components/common/SolidExport.d.ts.map +1 -1
- package/dist/components/common/SolidExport.js +19 -31
- package/dist/components/common/SolidExport.js.map +1 -1
- package/dist/components/common/SolidExport.tsx +7 -19
- package/dist/components/common/SolidFormStepper.d.ts.map +1 -1
- package/dist/components/common/SolidFormStepper.js +41 -41
- package/dist/components/common/SolidFormStepper.js.map +1 -1
- package/dist/components/common/SolidFormStepper.tsx +5 -6
- package/dist/components/core/common/LoadDynamicJsxComponent.d.ts +2 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.d.ts.map +1 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.js +50 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.js.map +1 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.tsx +70 -0
- package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.d.ts.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js +9 -9
- package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.tsx +8 -9
- package/dist/components/core/common/SolidAccountSettings/SolidNotifications.d.ts.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js +8 -8
- package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +7 -9
- package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.d.ts.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.js +11 -11
- package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.js.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.tsx +10 -11
- package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.d.ts.map +1 -1
- package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.js +9 -9
- package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.js.map +1 -1
- package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.tsx +8 -9
- package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.d.ts.map +1 -1
- package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js +7 -7
- package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js.map +1 -1
- package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.tsx +6 -7
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +78 -21
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.tsx +65 -10
- package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.d.ts.map +1 -1
- package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js +6 -8
- package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js.map +1 -1
- package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +5 -9
- package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.d.ts.map +1 -1
- package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js +9 -11
- package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js.map +1 -1
- package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.tsx +5 -10
- package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.d.ts.map +1 -1
- package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.js +5 -6
- package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.js.map +1 -1
- package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.tsx +5 -8
- package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.d.ts.map +1 -1
- package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js +10 -12
- package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js.map +1 -1
- package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.tsx +6 -11
- package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.d.ts.map +1 -1
- package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js +11 -6
- package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js.map +1 -1
- package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx +13 -1
- package/dist/components/core/form/SolidFormUserViewLayout.d.ts.map +1 -1
- package/dist/components/core/form/SolidFormUserViewLayout.js +7 -8
- package/dist/components/core/form/SolidFormUserViewLayout.js.map +1 -1
- package/dist/components/core/form/SolidFormUserViewLayout.tsx +5 -7
- package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
- package/dist/components/core/form/SolidFormView.js +12 -21
- package/dist/components/core/form/SolidFormView.js.map +1 -1
- package/dist/components/core/form/SolidFormView.tsx +11 -33
- package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.js +22 -15
- package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.tsx +14 -2
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +37 -26
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +38 -5
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +11 -11
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +9 -11
- package/dist/components/core/kanban/KanbanUserViewLayout.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanUserViewLayout.js +7 -8
- package/dist/components/core/kanban/KanbanUserViewLayout.js.map +1 -1
- package/dist/components/core/kanban/KanbanUserViewLayout.tsx +4 -6
- package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.js +5 -7
- package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.tsx +4 -9
- package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.d.ts.map +1 -1
- package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js +13 -13
- package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js.map +1 -1
- package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx +5 -6
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +20 -67
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidListView.tsx +9 -76
- package/dist/components/core/model/CreateModel.d.ts.map +1 -1
- package/dist/components/core/model/CreateModel.js +15 -25
- package/dist/components/core/model/CreateModel.js.map +1 -1
- package/dist/components/core/model/CreateModel.tsx +12 -32
- package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
- package/dist/components/core/model/FieldMetaData.js +6 -17
- package/dist/components/core/model/FieldMetaData.js.map +1 -1
- package/dist/components/core/model/FieldMetaData.tsx +5 -26
- package/dist/components/core/model/ModelMetaData.d.ts.map +1 -1
- package/dist/components/core/model/ModelMetaData.js +48 -55
- package/dist/components/core/model/ModelMetaData.js.map +1 -1
- package/dist/components/core/model/ModelMetaData.tsx +4 -22
- package/dist/components/core/module/CreateModule.d.ts.map +1 -1
- package/dist/components/core/module/CreateModule.js +42 -44
- package/dist/components/core/module/CreateModule.js.map +1 -1
- package/dist/components/core/module/CreateModule.tsx +13 -27
- package/dist/components/core/module/ModuleListViewData.d.ts.map +1 -1
- package/dist/components/core/module/ModuleListViewData.js +11 -7
- package/dist/components/core/module/ModuleListViewData.js.map +1 -1
- package/dist/components/core/module/ModuleListViewData.tsx +10 -8
- package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
- package/dist/components/core/tree/SolidTreeView.js +32 -69
- package/dist/components/core/tree/SolidTreeView.js.map +1 -1
- package/dist/components/core/tree/SolidTreeView.tsx +8 -47
- package/dist/components/core/users/CreateUser.d.ts.map +1 -1
- package/dist/components/core/users/CreateUser.js +24 -37
- package/dist/components/core/users/CreateUser.js.map +1 -1
- package/dist/components/core/users/CreateUser.tsx +8 -46
- package/dist/components/core/users/UserListView.d.ts.map +1 -1
- package/dist/components/core/users/UserListView.js +9 -16
- package/dist/components/core/users/UserListView.js.map +1 -1
- package/dist/components/core/users/UserListView.tsx +5 -21
- package/dist/components/layout/AdminLayout.d.ts.map +1 -1
- package/dist/components/layout/AdminLayout.js +4 -2
- package/dist/components/layout/AdminLayout.js.map +1 -1
- package/dist/components/layout/AdminLayout.tsx +4 -2
- package/dist/components/layout/AppSidebar.d.ts.map +1 -1
- package/dist/components/layout/AppSidebar.js +1 -2
- package/dist/components/layout/AppSidebar.js.map +1 -1
- package/dist/components/layout/AppSidebar.tsx +0 -2
- package/dist/components/layout/Layout.d.ts.map +1 -1
- package/dist/components/layout/Layout.js +2 -1
- package/dist/components/layout/Layout.js.map +1 -1
- package/dist/components/layout/Layout.tsx +2 -0
- package/dist/components/layout/navbar-one.d.ts.map +1 -1
- package/dist/components/layout/navbar-one.js +1 -2
- package/dist/components/layout/navbar-one.js.map +1 -1
- package/dist/components/layout/navbar-one.tsx +0 -2
- package/dist/components/layout/navbar-two-menu.d.ts.map +1 -1
- package/dist/components/layout/navbar-two-menu.js +50 -24
- package/dist/components/layout/navbar-two-menu.js.map +1 -1
- package/dist/components/layout/navbar-two-menu.tsx +48 -30
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/index.ts +4 -0
- package/dist/nextAuth/authProviders.d.ts +4 -0
- package/dist/nextAuth/authProviders.d.ts.map +1 -0
- package/dist/nextAuth/authProviders.js +198 -0
- package/dist/nextAuth/authProviders.js.map +1 -0
- package/dist/nextAuth/authProviders.tsx +232 -0
- package/dist/nextAuth/handleLogout.d.ts +2 -0
- package/dist/nextAuth/handleLogout.d.ts.map +1 -0
- package/dist/nextAuth/handleLogout.js +36 -0
- package/dist/nextAuth/handleLogout.js.map +1 -0
- package/dist/nextAuth/handleLogout.tsx +39 -0
- package/dist/nextAuth/refreshAccessToken.d.ts +2 -0
- package/dist/nextAuth/refreshAccessToken.d.ts.map +1 -0
- package/dist/nextAuth/refreshAccessToken.js +24 -0
- package/dist/nextAuth/refreshAccessToken.js.map +1 -0
- package/dist/nextAuth/refreshAccessToken.tsx +28 -0
- package/dist/redux/features/settingsSlice.d.ts +20 -0
- package/dist/redux/features/settingsSlice.d.ts.map +1 -0
- package/dist/redux/features/settingsSlice.js +39 -0
- package/dist/redux/features/settingsSlice.js.map +1 -0
- package/dist/redux/features/settingsSlice.ts +60 -0
- package/dist/redux/features/toastSlice.d.ts +15 -0
- package/dist/redux/features/toastSlice.d.ts.map +1 -0
- package/dist/redux/features/toastSlice.js +20 -0
- package/dist/redux/features/toastSlice.js.map +1 -0
- package/dist/redux/features/toastSlice.ts +35 -0
- package/dist/redux/store/defaultStoreConfig.d.ts +1 -0
- package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
- package/dist/redux/store/defaultStoreConfig.js +2 -1
- package/dist/redux/store/defaultStoreConfig.js.map +1 -1
- package/dist/redux/store/defaultStoreConfig.ts +2 -0
- package/package.json +1 -1
- package/dist/components/auth/AuthTabs.d.ts +0 -14
- package/dist/components/auth/AuthTabs.d.ts.map +0 -1
- package/dist/components/auth/AuthTabs.js +0 -19
- package/dist/components/auth/AuthTabs.js.map +0 -1
- package/dist/components/auth/AuthTabs.tsx +0 -38
- package/dist/components/common/SolidErrorStatePage.d.ts +0 -12
- package/dist/components/common/SolidErrorStatePage.d.ts.map +0 -1
- package/dist/components/common/SolidErrorStatePage.js +0 -16
- package/dist/components/common/SolidErrorStatePage.js.map +0 -1
- package/dist/components/common/SolidErrorStatePage.tsx +0 -55
- package/dist/components/core/list/PLAN.md +0 -92
- package/dist/components/core/list/SolidDataTable.d.ts +0 -58
- package/dist/components/core/list/SolidDataTable.d.ts.map +0 -1
- package/dist/components/core/list/SolidDataTable.js +0 -141
- package/dist/components/core/list/SolidDataTable.js.map +0 -1
- package/dist/components/core/list/SolidDataTable.tsx +0 -314
- package/dist/components/core/list/SolidDataTablePagination.d.ts +0 -15
- package/dist/components/core/list/SolidDataTablePagination.d.ts.map +0 -1
- package/dist/components/core/list/SolidDataTablePagination.js +0 -22
- package/dist/components/core/list/SolidDataTablePagination.js.map +0 -1
- package/dist/components/core/list/SolidDataTablePagination.tsx +0 -71
- package/dist/components/layout/AdminTopHeader.d.ts +0 -2
- package/dist/components/layout/AdminTopHeader.d.ts.map +0 -1
- package/dist/components/layout/AdminTopHeader.js +0 -68
- package/dist/components/layout/AdminTopHeader.js.map +0 -1
- package/dist/components/layout/AdminTopHeader.tsx +0 -135
- package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts +0 -24
- package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidAutocomplete.js +0 -224
- package/dist/components/shad-cn-ui/SolidAutocomplete.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidAutocomplete.tsx +0 -339
- package/dist/components/shad-cn-ui/SolidButton.d.ts +0 -14
- package/dist/components/shad-cn-ui/SolidButton.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidButton.js +0 -36
- package/dist/components/shad-cn-ui/SolidButton.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidButton.tsx +0 -54
- package/dist/components/shad-cn-ui/SolidInput.d.ts +0 -5
- package/dist/components/shad-cn-ui/SolidInput.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidInput.js +0 -35
- package/dist/components/shad-cn-ui/SolidInput.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidInput.tsx +0 -12
- package/dist/components/shad-cn-ui/SolidNumberInput.d.ts +0 -10
- package/dist/components/shad-cn-ui/SolidNumberInput.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidNumberInput.js +0 -33
- package/dist/components/shad-cn-ui/SolidNumberInput.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidNumberInput.tsx +0 -24
- package/dist/components/shad-cn-ui/SolidSelect.d.ts +0 -16
- package/dist/components/shad-cn-ui/SolidSelect.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidSelect.js +0 -26
- package/dist/components/shad-cn-ui/SolidSelect.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidSelect.tsx +0 -65
- package/dist/components/shad-cn-ui/SolidTabs.d.ts +0 -18
- package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/SolidTabs.js +0 -22
- package/dist/components/shad-cn-ui/SolidTabs.js.map +0 -1
- package/dist/components/shad-cn-ui/SolidTabs.tsx +0 -73
- package/dist/components/shad-cn-ui/index.d.ts +0 -7
- package/dist/components/shad-cn-ui/index.d.ts.map +0 -1
- package/dist/components/shad-cn-ui/index.js +0 -7
- package/dist/components/shad-cn-ui/index.js.map +0 -1
- package/dist/components/shad-cn-ui/index.ts +0 -6
- package/dist/components/solid-ui/SolidButton.d.ts +0 -14
- package/dist/components/solid-ui/SolidButton.d.ts.map +0 -1
- package/dist/components/solid-ui/SolidButton.js +0 -36
- package/dist/components/solid-ui/SolidButton.js.map +0 -1
- package/dist/components/solid-ui/SolidButton.tsx +0 -54
- package/dist/components/solid-ui/SolidTabs.d.ts +0 -18
- package/dist/components/solid-ui/SolidTabs.d.ts.map +0 -1
- package/dist/components/solid-ui/SolidTabs.js +0 -22
- package/dist/components/solid-ui/SolidTabs.js.map +0 -1
- package/dist/components/solid-ui/SolidTabs.tsx +0 -73
- package/dist/components/solid-ui/index.d.ts +0 -3
- package/dist/components/solid-ui/index.d.ts.map +0 -1
- package/dist/components/solid-ui/index.js +0 -3
- package/dist/components/solid-ui/index.js.map +0 -1
- package/dist/components/solid-ui/index.ts +0 -2
- package/dist/resources/images/errors/error-astronaut-404.png +0 -0
- package/dist/resources/shadcn-base.css +0 -3200
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
|
-
export type DataTableStateEvent = {
|
|
4
|
-
sortField?: string;
|
|
5
|
-
sortOrder?: 1 | -1 | 0;
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
type HeaderRenderer = React.ReactNode | (() => React.ReactNode);
|
|
9
|
-
type BodyRenderer = (rowData: any) => React.ReactNode;
|
|
10
|
-
|
|
11
|
-
export type SolidColumnProps = {
|
|
12
|
-
field?: string;
|
|
13
|
-
header?: HeaderRenderer;
|
|
14
|
-
body?: BodyRenderer;
|
|
15
|
-
sortable?: boolean;
|
|
16
|
-
selectionMode?: "multiple" | "single" | null;
|
|
17
|
-
headerStyle?: React.CSSProperties;
|
|
18
|
-
style?: React.CSSProperties;
|
|
19
|
-
className?: string;
|
|
20
|
-
headerClassName?: string;
|
|
21
|
-
frozen?: boolean;
|
|
22
|
-
alignFrozen?: "left" | "right";
|
|
23
|
-
[key: string]: any;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export function Column(_props: SolidColumnProps) {
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
type SolidDataTableProps = {
|
|
31
|
-
value: any[];
|
|
32
|
-
children: React.ReactNode;
|
|
33
|
-
size?: "small" | "normal" | "large";
|
|
34
|
-
viewportHeight?: string;
|
|
35
|
-
dataKey?: string;
|
|
36
|
-
emptyMessage?: React.ReactNode;
|
|
37
|
-
rows?: number;
|
|
38
|
-
first?: number;
|
|
39
|
-
totalRecords?: number;
|
|
40
|
-
rowsPerPageOptions?: number[];
|
|
41
|
-
onPage?: (event: { first: number; rows: number }) => void;
|
|
42
|
-
onSort?: (event: DataTableStateEvent) => void;
|
|
43
|
-
sortField?: string;
|
|
44
|
-
sortOrder?: 1 | -1 | 0;
|
|
45
|
-
removableSort?: boolean;
|
|
46
|
-
selection?: any[];
|
|
47
|
-
selectionMode?: "checkbox" | null;
|
|
48
|
-
onSelectionChange?: (event: { value: any[] }) => void;
|
|
49
|
-
onRowClick?: (event: { data: any }) => void;
|
|
50
|
-
rowClassName?: (rowData: any) => string;
|
|
51
|
-
tableClassName?: string;
|
|
52
|
-
paginatorClassName?: string;
|
|
53
|
-
currentPageReportTemplate?: string;
|
|
54
|
-
[key: string]: any;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
const cx = (...parts: Array<string | undefined | false>) => parts.filter(Boolean).join(" ");
|
|
58
|
-
|
|
59
|
-
function renderHeaderNode(header?: HeaderRenderer) {
|
|
60
|
-
if (typeof header === "function") return header();
|
|
61
|
-
return header ?? null;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function normalizeColumns(children: React.ReactNode): React.ReactElement<SolidColumnProps>[] {
|
|
65
|
-
return React.Children.toArray(children).filter((child): child is React.ReactElement<SolidColumnProps> => {
|
|
66
|
-
return React.isValidElement(child);
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function resolveSortIcon(active: boolean, order: 1 | -1 | 0): string {
|
|
71
|
-
if (!active || order === 0) return "pi pi-sort-alt";
|
|
72
|
-
return order === 1 ? "pi pi-sort-amount-up-alt" : "pi pi-sort-amount-down";
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function nextSortOrder(active: boolean, order: 1 | -1 | 0, removableSort = true): 1 | -1 | 0 {
|
|
76
|
-
if (!active || order === 0) return 1;
|
|
77
|
-
if (order === 1) return -1;
|
|
78
|
-
return removableSort ? 0 : 1;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export function SolidDataTable({
|
|
82
|
-
value,
|
|
83
|
-
children,
|
|
84
|
-
size = "normal",
|
|
85
|
-
viewportHeight,
|
|
86
|
-
dataKey = "id",
|
|
87
|
-
emptyMessage,
|
|
88
|
-
rows = 25,
|
|
89
|
-
first = 0,
|
|
90
|
-
totalRecords = 0,
|
|
91
|
-
rowsPerPageOptions = [10, 25, 50, 100],
|
|
92
|
-
onPage,
|
|
93
|
-
onSort,
|
|
94
|
-
sortField,
|
|
95
|
-
sortOrder = 0,
|
|
96
|
-
removableSort = true,
|
|
97
|
-
selection = [],
|
|
98
|
-
selectionMode,
|
|
99
|
-
onSelectionChange,
|
|
100
|
-
onRowClick,
|
|
101
|
-
rowClassName,
|
|
102
|
-
tableClassName,
|
|
103
|
-
paginatorClassName,
|
|
104
|
-
currentPageReportTemplate = "{first} - {last} of {totalRecords}",
|
|
105
|
-
}: SolidDataTableProps) {
|
|
106
|
-
const columns = normalizeColumns(children);
|
|
107
|
-
const pageRows = value ?? [];
|
|
108
|
-
|
|
109
|
-
const selectedKeys = new Set((selection || []).map((row: any) => String(row?.[dataKey])));
|
|
110
|
-
const allSelected = pageRows.length > 0 && pageRows.every((row: any) => selectedKeys.has(String(row?.[dataKey])));
|
|
111
|
-
|
|
112
|
-
const start = totalRecords === 0 ? 0 : first + 1;
|
|
113
|
-
const end = Math.min(first + rows, totalRecords);
|
|
114
|
-
const currentPage = rows > 0 ? Math.floor(first / rows) + 1 : 1;
|
|
115
|
-
const totalPages = rows > 0 ? Math.max(1, Math.ceil(totalRecords / rows)) : 1;
|
|
116
|
-
|
|
117
|
-
const report = currentPageReportTemplate
|
|
118
|
-
.replace("{first}", String(start))
|
|
119
|
-
.replace("{last}", String(end))
|
|
120
|
-
.replace("{totalRecords}", String(totalRecords));
|
|
121
|
-
|
|
122
|
-
const emitSelection = (nextSelection: any[]) => {
|
|
123
|
-
onSelectionChange?.({ value: nextSelection });
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
const toggleSelectAll = (checked: boolean) => {
|
|
127
|
-
if (!checked) {
|
|
128
|
-
const pageKeys = new Set(pageRows.map((row: any) => String(row?.[dataKey])));
|
|
129
|
-
emitSelection((selection || []).filter((row: any) => !pageKeys.has(String(row?.[dataKey]))));
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
const merged = [...(selection || [])];
|
|
133
|
-
const mergedKeys = new Set(merged.map((row: any) => String(row?.[dataKey])));
|
|
134
|
-
pageRows.forEach((row: any) => {
|
|
135
|
-
const key = String(row?.[dataKey]);
|
|
136
|
-
if (!mergedKeys.has(key)) merged.push(row);
|
|
137
|
-
});
|
|
138
|
-
emitSelection(merged);
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
const toggleRowSelection = (rowData: any, checked: boolean) => {
|
|
142
|
-
const key = String(rowData?.[dataKey]);
|
|
143
|
-
if (!checked) {
|
|
144
|
-
emitSelection((selection || []).filter((row: any) => String(row?.[dataKey]) !== key));
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
emitSelection([...(selection || []), rowData]);
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
const densityClass =
|
|
151
|
-
size === "small"
|
|
152
|
-
? "solid-table-density-compact"
|
|
153
|
-
: size === "large"
|
|
154
|
-
? "solid-table-density-comfortable"
|
|
155
|
-
: "solid-table-density-cozy";
|
|
156
|
-
|
|
157
|
-
return (
|
|
158
|
-
<div
|
|
159
|
-
className={cx("solid-data-table-root w-full min-h-0", densityClass)}
|
|
160
|
-
style={{
|
|
161
|
-
height: viewportHeight || "100%",
|
|
162
|
-
maxHeight: viewportHeight || "100%",
|
|
163
|
-
}}
|
|
164
|
-
>
|
|
165
|
-
<div className="solid-data-table-viewport min-h-0 rounded-md border border-border/60 bg-background">
|
|
166
|
-
<table className={cx("w-full text-sm border-collapse", tableClassName)}>
|
|
167
|
-
<thead className="solid-data-table-head sticky top-0 z-2">
|
|
168
|
-
<tr>
|
|
169
|
-
{columns.map((column, index) => {
|
|
170
|
-
const props = column.props;
|
|
171
|
-
const isSelectionColumn = props.selectionMode === "multiple";
|
|
172
|
-
const isSortable = Boolean(props.sortable && props.field && !isSelectionColumn);
|
|
173
|
-
const isActiveSort = isSortable && sortField === props.field;
|
|
174
|
-
const iconClass = resolveSortIcon(Boolean(isActiveSort), sortOrder);
|
|
175
|
-
return (
|
|
176
|
-
<th
|
|
177
|
-
key={`header-${index}`}
|
|
178
|
-
className={cx(
|
|
179
|
-
"solid-data-table-th text-left text-foreground whitespace-nowrap",
|
|
180
|
-
isSelectionColumn ? "solid-data-table-selection-col" : undefined,
|
|
181
|
-
props.headerClassName
|
|
182
|
-
)}
|
|
183
|
-
style={{ ...props.style, ...props.headerStyle }}
|
|
184
|
-
>
|
|
185
|
-
{isSelectionColumn ? (
|
|
186
|
-
<input
|
|
187
|
-
type="checkbox"
|
|
188
|
-
checked={allSelected}
|
|
189
|
-
onChange={(e) => toggleSelectAll(e.currentTarget.checked)}
|
|
190
|
-
aria-label="Select all rows"
|
|
191
|
-
/>
|
|
192
|
-
) : (
|
|
193
|
-
<button
|
|
194
|
-
type="button"
|
|
195
|
-
className={cx("solid-table-header-button", isSortable ? "is-sortable" : undefined)}
|
|
196
|
-
onClick={() => {
|
|
197
|
-
if (!isSortable) return;
|
|
198
|
-
const nextOrder = nextSortOrder(Boolean(isActiveSort), sortOrder, removableSort);
|
|
199
|
-
onSort?.({
|
|
200
|
-
sortField: nextOrder === 0 ? undefined : props.field,
|
|
201
|
-
sortOrder: nextOrder,
|
|
202
|
-
});
|
|
203
|
-
}}
|
|
204
|
-
>
|
|
205
|
-
{renderHeaderNode(props.header)}
|
|
206
|
-
{isSortable ? <i className={iconClass} aria-hidden="true" /> : null}
|
|
207
|
-
</button>
|
|
208
|
-
)}
|
|
209
|
-
</th>
|
|
210
|
-
);
|
|
211
|
-
})}
|
|
212
|
-
</tr>
|
|
213
|
-
</thead>
|
|
214
|
-
<tbody>
|
|
215
|
-
{pageRows.length === 0 ? (
|
|
216
|
-
<tr>
|
|
217
|
-
<td className="px-3 py-6 text-center text-muted-foreground" colSpan={Math.max(columns.length, 1)}>
|
|
218
|
-
{emptyMessage || "No records found"}
|
|
219
|
-
</td>
|
|
220
|
-
</tr>
|
|
221
|
-
) : (
|
|
222
|
-
pageRows.map((rowData: any) => {
|
|
223
|
-
const key = String(rowData?.[dataKey]);
|
|
224
|
-
const rowSelected = selectedKeys.has(key);
|
|
225
|
-
return (
|
|
226
|
-
<tr
|
|
227
|
-
key={key}
|
|
228
|
-
className={cx("solid-data-table-row", rowClassName?.(rowData))}
|
|
229
|
-
onClick={(event) => {
|
|
230
|
-
const target = event.target as HTMLElement;
|
|
231
|
-
if (target.closest("button,a,input,label,[data-no-row-click='true']")) return;
|
|
232
|
-
onRowClick?.({ data: rowData });
|
|
233
|
-
}}
|
|
234
|
-
>
|
|
235
|
-
{columns.map((column, index) => {
|
|
236
|
-
const props = column.props;
|
|
237
|
-
const isSelectionColumn = props.selectionMode === "multiple";
|
|
238
|
-
const content = isSelectionColumn
|
|
239
|
-
? (
|
|
240
|
-
<input
|
|
241
|
-
type="checkbox"
|
|
242
|
-
checked={rowSelected}
|
|
243
|
-
onChange={(e) => toggleRowSelection(rowData, e.currentTarget.checked)}
|
|
244
|
-
onClick={(e) => e.stopPropagation()}
|
|
245
|
-
aria-label="Select row"
|
|
246
|
-
/>
|
|
247
|
-
)
|
|
248
|
-
: props.body
|
|
249
|
-
? props.body(rowData)
|
|
250
|
-
: props.field
|
|
251
|
-
? rowData?.[props.field]
|
|
252
|
-
: null;
|
|
253
|
-
return (
|
|
254
|
-
<td
|
|
255
|
-
key={`cell-${key}-${index}`}
|
|
256
|
-
className={cx(
|
|
257
|
-
"solid-data-table-td align-top text-foreground",
|
|
258
|
-
isSelectionColumn ? "solid-data-table-selection-col" : undefined,
|
|
259
|
-
props.className
|
|
260
|
-
)}
|
|
261
|
-
style={props.style}
|
|
262
|
-
>
|
|
263
|
-
{content}
|
|
264
|
-
</td>
|
|
265
|
-
);
|
|
266
|
-
})}
|
|
267
|
-
</tr>
|
|
268
|
-
);
|
|
269
|
-
})
|
|
270
|
-
)}
|
|
271
|
-
</tbody>
|
|
272
|
-
</table>
|
|
273
|
-
</div>
|
|
274
|
-
|
|
275
|
-
{typeof onPage === "function" ? (
|
|
276
|
-
<div
|
|
277
|
-
className={cx("w-full solid-table-paginator solid-table-paginator-align-end flex items-center justify-end gap-3 text-sm rounded-md border border-border/60 px-3 py-1.5 bg-background", paginatorClassName)}
|
|
278
|
-
>
|
|
279
|
-
<div className="solid-paginator-meta flex items-center gap-2 ml-auto">
|
|
280
|
-
<span className="solid-paginator-label">Rows</span>
|
|
281
|
-
<select
|
|
282
|
-
value={rows}
|
|
283
|
-
onChange={(e) => onPage({ first: 0, rows: Number(e.target.value) })}
|
|
284
|
-
className="solid-paginator-select"
|
|
285
|
-
>
|
|
286
|
-
{rowsPerPageOptions.map((option) => (
|
|
287
|
-
<option key={option} value={option}>{option}</option>
|
|
288
|
-
))}
|
|
289
|
-
</select>
|
|
290
|
-
<span className="solid-paginator-report">{report}</span>
|
|
291
|
-
</div>
|
|
292
|
-
<div className="solid-paginator-actions flex items-center gap-2">
|
|
293
|
-
<button
|
|
294
|
-
type="button"
|
|
295
|
-
className="solid-paginator-btn"
|
|
296
|
-
onClick={() => onPage({ first: Math.max(0, first - rows), rows })}
|
|
297
|
-
disabled={currentPage <= 1}
|
|
298
|
-
>
|
|
299
|
-
Previous
|
|
300
|
-
</button>
|
|
301
|
-
<button
|
|
302
|
-
type="button"
|
|
303
|
-
className="solid-paginator-btn"
|
|
304
|
-
onClick={() => onPage({ first: Math.min((totalPages - 1) * rows, first + rows), rows })}
|
|
305
|
-
disabled={currentPage >= totalPages}
|
|
306
|
-
>
|
|
307
|
-
Next
|
|
308
|
-
</button>
|
|
309
|
-
</div>
|
|
310
|
-
</div>
|
|
311
|
-
) : null}
|
|
312
|
-
</div>
|
|
313
|
-
);
|
|
314
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
type SolidDataTablePaginationProps = {
|
|
2
|
-
rows: number;
|
|
3
|
-
first: number;
|
|
4
|
-
totalRecords: number;
|
|
5
|
-
rowsPerPageOptions?: number[];
|
|
6
|
-
onPage: (event: {
|
|
7
|
-
first: number;
|
|
8
|
-
rows: number;
|
|
9
|
-
}) => void;
|
|
10
|
-
currentPageReportTemplate?: string;
|
|
11
|
-
className?: string;
|
|
12
|
-
};
|
|
13
|
-
export declare function SolidDataTablePagination({ rows, first, totalRecords, rowsPerPageOptions, onPage, currentPageReportTemplate, className, }: SolidDataTablePaginationProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=SolidDataTablePagination.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SolidDataTablePagination.d.ts","sourceRoot":"","sources":["../../../../src/components/core/list/SolidDataTablePagination.tsx"],"names":[],"mappings":"AAEA,KAAK,6BAA6B,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACzD,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAIF,wBAAgB,wBAAwB,CAAC,EACvC,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,kBAAsC,EACtC,MAAM,EACN,yBAAgE,EAChE,SAAS,GACV,EAAE,6BAA6B,2CA+C/B"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
var cx = function () {
|
|
3
|
-
var parts = [];
|
|
4
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
5
|
-
parts[_i] = arguments[_i];
|
|
6
|
-
}
|
|
7
|
-
return parts.filter(Boolean).join(" ");
|
|
8
|
-
};
|
|
9
|
-
export function SolidDataTablePagination(_a) {
|
|
10
|
-
var rows = _a.rows, first = _a.first, totalRecords = _a.totalRecords, _b = _a.rowsPerPageOptions, rowsPerPageOptions = _b === void 0 ? [10, 25, 50, 100] : _b, onPage = _a.onPage, _c = _a.currentPageReportTemplate, currentPageReportTemplate = _c === void 0 ? "{first} - {last} of {totalRecords}" : _c, className = _a.className;
|
|
11
|
-
var safeRows = rows > 0 ? rows : 25;
|
|
12
|
-
var start = totalRecords === 0 ? 0 : first + 1;
|
|
13
|
-
var end = Math.min(first + safeRows, totalRecords);
|
|
14
|
-
var currentPage = Math.floor(first / safeRows) + 1;
|
|
15
|
-
var totalPages = Math.max(1, Math.ceil(totalRecords / safeRows));
|
|
16
|
-
var report = currentPageReportTemplate
|
|
17
|
-
.replace("{first}", String(start))
|
|
18
|
-
.replace("{last}", String(end))
|
|
19
|
-
.replace("{totalRecords}", String(totalRecords));
|
|
20
|
-
return (_jsxs("div", { className: cx("w-full solid-table-paginator flex items-center justify-end gap-3 text-sm rounded-md border border-border/60 px-3 py-1.5 bg-background", className), children: [_jsxs("div", { className: "solid-paginator-meta flex items-center gap-2 ml-auto", children: [_jsx("span", { className: "solid-paginator-label", children: "Rows" }), _jsx("select", { value: safeRows, onChange: function (e) { return onPage({ first: 0, rows: Number(e.target.value) }); }, className: "solid-paginator-select", children: rowsPerPageOptions.map(function (option) { return (_jsx("option", { value: option, children: option }, option)); }) }), _jsx("span", { className: "solid-paginator-report", children: report })] }), _jsxs("div", { className: "solid-paginator-actions flex items-center gap-2", children: [_jsx("button", { type: "button", className: "solid-paginator-btn", onClick: function () { return onPage({ first: Math.max(0, first - safeRows), rows: safeRows }); }, disabled: currentPage <= 1, children: "Previous" }), _jsx("button", { type: "button", className: "solid-paginator-btn", onClick: function () { return onPage({ first: Math.min((totalPages - 1) * safeRows, first + safeRows), rows: safeRows }); }, disabled: currentPage >= totalPages, children: "Next" })] })] }));
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=SolidDataTablePagination.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SolidDataTablePagination.js","sourceRoot":"","sources":["../../../../src/components/core/list/SolidDataTablePagination.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n\ntype SolidDataTablePaginationProps = {\n rows: number;\n first: number;\n totalRecords: number;\n rowsPerPageOptions?: number[];\n onPage: (event: { first: number; rows: number }) => void;\n currentPageReportTemplate?: string;\n className?: string;\n};\n\nconst cx = (...parts: Array<string | undefined | false>) => parts.filter(Boolean).join(\" \");\n\nexport function SolidDataTablePagination({\n rows,\n first,\n totalRecords,\n rowsPerPageOptions = [10, 25, 50, 100],\n onPage,\n currentPageReportTemplate = \"{first} - {last} of {totalRecords}\",\n className,\n}: SolidDataTablePaginationProps) {\n const safeRows = rows > 0 ? rows : 25;\n const start = totalRecords === 0 ? 0 : first + 1;\n const end = Math.min(first + safeRows, totalRecords);\n const currentPage = Math.floor(first / safeRows) + 1;\n const totalPages = Math.max(1, Math.ceil(totalRecords / safeRows));\n\n const report = currentPageReportTemplate\n .replace(\"{first}\", String(start))\n .replace(\"{last}\", String(end))\n .replace(\"{totalRecords}\", String(totalRecords));\n\n return (\n <div className={cx(\"w-full solid-table-paginator flex items-center justify-end gap-3 text-sm rounded-md border border-border/60 px-3 py-1.5 bg-background\", className)}>\n <div className=\"solid-paginator-meta flex items-center gap-2 ml-auto\">\n <span className=\"solid-paginator-label\">Rows</span>\n <select\n value={safeRows}\n onChange={(e) => onPage({ first: 0, rows: Number(e.target.value) })}\n className=\"solid-paginator-select\"\n >\n {rowsPerPageOptions.map((option) => (\n <option key={option} value={option}>{option}</option>\n ))}\n </select>\n <span className=\"solid-paginator-report\">{report}</span>\n </div>\n <div className=\"solid-paginator-actions flex items-center gap-2\">\n <button\n type=\"button\"\n className=\"solid-paginator-btn\"\n onClick={() => onPage({ first: Math.max(0, first - safeRows), rows: safeRows })}\n disabled={currentPage <= 1}\n >\n Previous\n </button>\n <button\n type=\"button\"\n className=\"solid-paginator-btn\"\n onClick={() => onPage({ first: Math.min((totalPages - 1) * safeRows, first + safeRows), rows: safeRows })}\n disabled={currentPage >= totalPages}\n >\n Next\n </button>\n </div>\n </div>\n );\n}\n\n"]}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
|
-
type SolidDataTablePaginationProps = {
|
|
4
|
-
rows: number;
|
|
5
|
-
first: number;
|
|
6
|
-
totalRecords: number;
|
|
7
|
-
rowsPerPageOptions?: number[];
|
|
8
|
-
onPage: (event: { first: number; rows: number }) => void;
|
|
9
|
-
currentPageReportTemplate?: string;
|
|
10
|
-
className?: string;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const cx = (...parts: Array<string | undefined | false>) => parts.filter(Boolean).join(" ");
|
|
14
|
-
|
|
15
|
-
export function SolidDataTablePagination({
|
|
16
|
-
rows,
|
|
17
|
-
first,
|
|
18
|
-
totalRecords,
|
|
19
|
-
rowsPerPageOptions = [10, 25, 50, 100],
|
|
20
|
-
onPage,
|
|
21
|
-
currentPageReportTemplate = "{first} - {last} of {totalRecords}",
|
|
22
|
-
className,
|
|
23
|
-
}: SolidDataTablePaginationProps) {
|
|
24
|
-
const safeRows = rows > 0 ? rows : 25;
|
|
25
|
-
const start = totalRecords === 0 ? 0 : first + 1;
|
|
26
|
-
const end = Math.min(first + safeRows, totalRecords);
|
|
27
|
-
const currentPage = Math.floor(first / safeRows) + 1;
|
|
28
|
-
const totalPages = Math.max(1, Math.ceil(totalRecords / safeRows));
|
|
29
|
-
|
|
30
|
-
const report = currentPageReportTemplate
|
|
31
|
-
.replace("{first}", String(start))
|
|
32
|
-
.replace("{last}", String(end))
|
|
33
|
-
.replace("{totalRecords}", String(totalRecords));
|
|
34
|
-
|
|
35
|
-
return (
|
|
36
|
-
<div className={cx("w-full solid-table-paginator flex items-center justify-end gap-3 text-sm rounded-md border border-border/60 px-3 py-1.5 bg-background", className)}>
|
|
37
|
-
<div className="solid-paginator-meta flex items-center gap-2 ml-auto">
|
|
38
|
-
<span className="solid-paginator-label">Rows</span>
|
|
39
|
-
<select
|
|
40
|
-
value={safeRows}
|
|
41
|
-
onChange={(e) => onPage({ first: 0, rows: Number(e.target.value) })}
|
|
42
|
-
className="solid-paginator-select"
|
|
43
|
-
>
|
|
44
|
-
{rowsPerPageOptions.map((option) => (
|
|
45
|
-
<option key={option} value={option}>{option}</option>
|
|
46
|
-
))}
|
|
47
|
-
</select>
|
|
48
|
-
<span className="solid-paginator-report">{report}</span>
|
|
49
|
-
</div>
|
|
50
|
-
<div className="solid-paginator-actions flex items-center gap-2">
|
|
51
|
-
<button
|
|
52
|
-
type="button"
|
|
53
|
-
className="solid-paginator-btn"
|
|
54
|
-
onClick={() => onPage({ first: Math.max(0, first - safeRows), rows: safeRows })}
|
|
55
|
-
disabled={currentPage <= 1}
|
|
56
|
-
>
|
|
57
|
-
Previous
|
|
58
|
-
</button>
|
|
59
|
-
<button
|
|
60
|
-
type="button"
|
|
61
|
-
className="solid-paginator-btn"
|
|
62
|
-
onClick={() => onPage({ first: Math.min((totalPages - 1) * safeRows, first + safeRows), rows: safeRows })}
|
|
63
|
-
disabled={currentPage >= totalPages}
|
|
64
|
-
>
|
|
65
|
-
Next
|
|
66
|
-
</button>
|
|
67
|
-
</div>
|
|
68
|
-
</div>
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AdminTopHeader.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AdminTopHeader.tsx"],"names":[],"mappings":"AAcA,eAAO,MAAM,cAAc,+CAwH1B,CAAC"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useContext, useMemo } from "react";
|
|
3
|
-
import { usePathname } from "../../hooks/usePathname";
|
|
4
|
-
import { useSearchParams } from "../../hooks/useSearchParams";
|
|
5
|
-
import { useRouter } from "../../hooks/useRouter";
|
|
6
|
-
import { useGetSolidActionByIdQuery } from "../../redux/api/solidActionApi";
|
|
7
|
-
import { LayoutContext } from "./context/layoutcontext";
|
|
8
|
-
var SIDEBAR_TOGGLE_EVENT = "solidx:sidebar-toggle";
|
|
9
|
-
var toLabel = function (value) {
|
|
10
|
-
return decodeURIComponent(value)
|
|
11
|
-
.replace(/[-_]/g, " ")
|
|
12
|
-
.replace(/\b\w/g, function (m) { return m.toUpperCase(); });
|
|
13
|
-
};
|
|
14
|
-
export var AdminTopHeader = function () {
|
|
15
|
-
var pathname = usePathname();
|
|
16
|
-
var searchParams = useSearchParams();
|
|
17
|
-
var router = useRouter();
|
|
18
|
-
var toggleThemeMode = useContext(LayoutContext).toggleThemeMode;
|
|
19
|
-
// We treat actionId as the source of truth for breadcrumb labels.
|
|
20
|
-
// If present, we resolve module/model/action via action-metadata API
|
|
21
|
-
// so breadcrumbs are consistent across list/form/tree/kanban pages.
|
|
22
|
-
var actionId = searchParams.get("actionId");
|
|
23
|
-
var actionResponse = useGetSolidActionByIdQuery(actionId, {
|
|
24
|
-
skip: !actionId,
|
|
25
|
-
}).data;
|
|
26
|
-
var crumbs = useMemo(function () {
|
|
27
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
28
|
-
// API response shapes vary by adapter layer, so normalize defensively.
|
|
29
|
-
var actionData = (_c = (_b = (_a = actionResponse === null || actionResponse === void 0 ? void 0 : actionResponse.data) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : actionResponse === null || actionResponse === void 0 ? void 0 : actionResponse.data) !== null && _c !== void 0 ? _c : actionResponse;
|
|
30
|
-
var moduleFromApi = ((_d = actionData === null || actionData === void 0 ? void 0 : actionData.module) === null || _d === void 0 ? void 0 : _d.displayName) || ((_e = actionData === null || actionData === void 0 ? void 0 : actionData.module) === null || _e === void 0 ? void 0 : _e.name);
|
|
31
|
-
var modelFromApi = ((_f = actionData === null || actionData === void 0 ? void 0 : actionData.model) === null || _f === void 0 ? void 0 : _f.displayName) || ((_g = actionData === null || actionData === void 0 ? void 0 : actionData.model) === null || _g === void 0 ? void 0 : _g.name);
|
|
32
|
-
var actionFromApi = (actionData === null || actionData === void 0 ? void 0 : actionData.displayName) || (actionData === null || actionData === void 0 ? void 0 : actionData.name);
|
|
33
|
-
var actionDataId = (actionData === null || actionData === void 0 ? void 0 : actionData.id) != null ? String(actionData.id) : null;
|
|
34
|
-
var hasMatchingActionData = Boolean(actionId) && actionDataId === actionId;
|
|
35
|
-
// Priority 1: exact business breadcrumb contract requested:
|
|
36
|
-
// <module> > <model> > <action>.
|
|
37
|
-
// We only trust API crumbs when they belong to the current URL's actionId.
|
|
38
|
-
// This avoids stale list breadcrumbs bleeding into form routes that do not
|
|
39
|
-
// carry actionId in their query string.
|
|
40
|
-
if (hasMatchingActionData && (moduleFromApi || modelFromApi || actionFromApi)) {
|
|
41
|
-
return [moduleFromApi, modelFromApi, actionFromApi].filter(Boolean);
|
|
42
|
-
}
|
|
43
|
-
var segments = pathname.split("/").filter(Boolean);
|
|
44
|
-
// Priority 2: derive from route segments when API data is unavailable.
|
|
45
|
-
// This is intentionally ahead of query fallback so form pages don't
|
|
46
|
-
// inherit stale list query labels after list -> form navigation.
|
|
47
|
-
if (segments[0] === "admin" && segments[1] === "core") {
|
|
48
|
-
var moduleName = segments[2];
|
|
49
|
-
var modelName = segments[3];
|
|
50
|
-
var viewName = segments[4];
|
|
51
|
-
var next = [moduleName, modelName, viewName].filter(Boolean).map(function (item) { return toLabel(item); });
|
|
52
|
-
return next.length ? next : ["Admin"];
|
|
53
|
-
}
|
|
54
|
-
var menuItemName = searchParams.get("menuItemName");
|
|
55
|
-
var actionName = searchParams.get("actionName");
|
|
56
|
-
// Priority 3: legacy URL-query fallback for older links/pages.
|
|
57
|
-
if (menuItemName || actionName) {
|
|
58
|
-
return [menuItemName, actionName].filter(Boolean).map(function (item) { return toLabel(item); });
|
|
59
|
-
}
|
|
60
|
-
return ["Admin"];
|
|
61
|
-
}, [actionId, actionResponse, pathname, searchParams]);
|
|
62
|
-
var showBack = /\/admin\/core\/[^/]+\/[^/]+\/form\/[^/]+/.test(pathname);
|
|
63
|
-
var triggerSidebar = function () {
|
|
64
|
-
window.dispatchEvent(new CustomEvent(SIDEBAR_TOGGLE_EVENT));
|
|
65
|
-
};
|
|
66
|
-
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" }), _jsx("span", { children: crumb })] }, "".concat(crumb, "-").concat(index))); }) }), _jsxs("div", { className: "solid-admin-header-actions", children: [_jsxs("button", { type: "button", className: "solid-admin-theme-toggle", onClick: toggleThemeMode, "aria-label": "Toggle theme", title: "Toggle theme", children: [_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [_jsx("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" }), _jsx("path", { d: "M12 3l0 18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 9l4.65 -4.65", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 14.3l7.37 -7.37", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 19.6l8.85 -8.85", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })] }), _jsx("span", { className: "solid-sr-only", children: "Toggle theme" })] }), showBack && (_jsx("button", { type: "button", className: "solid-admin-back-btn", onClick: function () { return router.back(); }, "aria-label": "Go back", children: "Back" }))] })] }) }));
|
|
67
|
-
};
|
|
68
|
-
//# sourceMappingURL=AdminTopHeader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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 { LayoutContext } from \"./context/layoutcontext\";\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 { toggleThemeMode } = useContext(LayoutContext);\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 = [moduleName, modelName, viewName].filter(Boolean).map((item) => toLabel(item!));\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 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 <span>{crumb}</span>\n </span>\n ))}\n </nav>\n\n <div className=\"solid-admin-header-actions\">\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 {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 </div>\n </header>\n );\n};\n"]}
|