@jmruthers/pace-core 0.5.70 → 0.5.72
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/{DataTable-OSELOGMA.js → DataTable-RCFGXSPQ.js} +5 -5
- package/dist/{api-A4SUYPPV.js → api-DDMUKIUD.js} +2 -2
- package/dist/{chunk-5NV76BYF.js → chunk-2PDTIGS4.js} +6 -6
- package/dist/{chunk-GCUIIBLB.js → chunk-4CET7YQI.js} +4 -3
- package/dist/chunk-4CET7YQI.js.map +1 -0
- package/dist/{chunk-FOT3WUV6.js → chunk-67FGPOHX.js} +3 -3
- package/dist/{chunk-V2TE7LOF.js → chunk-BUM2ZPYC.js} +12 -12
- package/dist/{chunk-BHBMXMLT.js → chunk-C353TCFY.js} +2 -2
- package/dist/{chunk-NHR52QAQ.js → chunk-FGMFQSHX.js} +8 -7
- package/dist/chunk-FGMFQSHX.js.map +1 -0
- package/dist/{chunk-KWQH4VO3.js → chunk-GDIBOLKV.js} +2 -2
- package/dist/{chunk-OTJUAYBG.js → chunk-MTI7X73I.js} +5 -5
- package/dist/{chunk-4YMVZ76F.js → chunk-WMYLD5WP.js} +71 -66
- package/dist/chunk-WMYLD5WP.js.map +1 -0
- package/dist/{chunk-5G7JA3L5.js → chunk-XC4ZCSO4.js} +2 -2
- package/dist/components.js +7 -7
- package/dist/hooks.js +4 -4
- package/dist/index.js +10 -10
- package/dist/providers.js +2 -2
- package/dist/rbac/index.d.ts +4 -0
- package/dist/rbac/index.js +5 -5
- package/dist/utils.js +1 -1
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +1 -1
- package/docs/api/classes/MissingUserContextError.md +1 -1
- package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
- package/docs/api/classes/PermissionDeniedError.md +1 -1
- package/docs/api/classes/PublicErrorBoundary.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +1 -1
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +2 -2
- package/docs/api/classes/RBACError.md +1 -1
- package/docs/api/classes/RBACNotInitializedError.md +1 -1
- package/docs/api/classes/SecureSupabaseClient.md +1 -1
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +1 -1
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +1 -1
- package/docs/api/interfaces/DataTableColumn.md +1 -1
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventContextType.md +1 -1
- package/docs/api/interfaces/EventLogoProps.md +1 -1
- package/docs/api/interfaces/EventProviderProps.md +1 -1
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +1 -1
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
- package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
- package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACContextType.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACProviderProps.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +1 -1
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +3 -3
- package/docs/implementation-guides/data-tables.md +191 -0
- package/package.json +1 -1
- package/src/components/DataTable/components/DataTableBody.tsx +38 -27
- package/src/components/DataTable/components/UnifiedTableBody.tsx +72 -64
- package/src/rbac/__tests__/engine.comprehensive.test.ts +150 -78
- package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +52 -50
- package/src/rbac/__tests__/rbac-engine-simplified.test.ts +39 -19
- package/src/rbac/engine.test.ts +4 -0
- package/src/rbac/engine.ts +16 -7
- package/src/rbac/providers/RBACProvider.tsx +15 -4
- package/dist/chunk-4YMVZ76F.js.map +0 -1
- package/dist/chunk-GCUIIBLB.js.map +0 -1
- package/dist/chunk-NHR52QAQ.js.map +0 -1
- /package/dist/{DataTable-OSELOGMA.js.map → DataTable-RCFGXSPQ.js.map} +0 -0
- /package/dist/{api-A4SUYPPV.js.map → api-DDMUKIUD.js.map} +0 -0
- /package/dist/{chunk-5NV76BYF.js.map → chunk-2PDTIGS4.js.map} +0 -0
- /package/dist/{chunk-FOT3WUV6.js.map → chunk-67FGPOHX.js.map} +0 -0
- /package/dist/{chunk-V2TE7LOF.js.map → chunk-BUM2ZPYC.js.map} +0 -0
- /package/dist/{chunk-BHBMXMLT.js.map → chunk-C353TCFY.js.map} +0 -0
- /package/dist/{chunk-KWQH4VO3.js.map → chunk-GDIBOLKV.js.map} +0 -0
- /package/dist/{chunk-OTJUAYBG.js.map → chunk-MTI7X73I.js.map} +0 -0
- /package/dist/{chunk-5G7JA3L5.js.map → chunk-XC4ZCSO4.js.map} +0 -0
package/docs/api/modules.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
[@jmruthers/pace-core - v0.5.
|
|
1
|
+
[@jmruthers/pace-core - v0.5.72](README.md) / Exports
|
|
2
2
|
|
|
3
|
-
# @jmruthers/pace-core - v0.5.
|
|
3
|
+
# @jmruthers/pace-core - v0.5.72
|
|
4
4
|
|
|
5
5
|
**`File`**
|
|
6
6
|
|
|
@@ -5551,7 +5551,7 @@ RBACEngine instance
|
|
|
5551
5551
|
|
|
5552
5552
|
#### Defined in
|
|
5553
5553
|
|
|
5554
|
-
[packages/core/src/rbac/engine.ts:
|
|
5554
|
+
[packages/core/src/rbac/engine.ts:1029](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/engine.ts#L1029)
|
|
5555
5555
|
|
|
5556
5556
|
___
|
|
5557
5557
|
|
|
@@ -658,6 +658,197 @@ const columns: DataTableColumn<User>[] = [
|
|
|
658
658
|
];
|
|
659
659
|
```
|
|
660
660
|
|
|
661
|
+
## Inline Editing Configuration
|
|
662
|
+
|
|
663
|
+
The DataTable supports inline row editing, where columns can be configured to become input fields when the user clicks the "Edit" button on a row.
|
|
664
|
+
|
|
665
|
+
### Enabling Inline Editing
|
|
666
|
+
|
|
667
|
+
To enable inline editing, set `editing: true` in the features configuration:
|
|
668
|
+
|
|
669
|
+
```tsx
|
|
670
|
+
<DataTable
|
|
671
|
+
data={data}
|
|
672
|
+
columns={columns}
|
|
673
|
+
features={{
|
|
674
|
+
editing: true, // Enable inline editing
|
|
675
|
+
// ... other features
|
|
676
|
+
}}
|
|
677
|
+
onEditRow={handleEdit} // Required for saving changes
|
|
678
|
+
/>
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
### Configuring Editable Columns
|
|
682
|
+
|
|
683
|
+
By default, all columns are editable in edit mode. To control which columns can be edited, use the `editable` and `fieldType` properties:
|
|
684
|
+
|
|
685
|
+
```tsx
|
|
686
|
+
const columns: DataTableColumn<User>[] = [
|
|
687
|
+
{
|
|
688
|
+
accessorKey: 'name',
|
|
689
|
+
header: 'Name',
|
|
690
|
+
editable: true, // Column becomes input in edit mode
|
|
691
|
+
fieldType: 'text', // Input type: text, number, date, boolean, select
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
accessorKey: 'email',
|
|
695
|
+
header: 'Email',
|
|
696
|
+
editable: true,
|
|
697
|
+
fieldType: 'text',
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
accessorKey: 'age',
|
|
701
|
+
header: 'Age',
|
|
702
|
+
editable: true,
|
|
703
|
+
fieldType: 'number', // Numeric input field
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
accessorKey: 'role',
|
|
707
|
+
header: 'Role',
|
|
708
|
+
editable: true,
|
|
709
|
+
fieldType: 'select', // Select dropdown
|
|
710
|
+
fieldOptions: [ // Options for select fields
|
|
711
|
+
{ value: 'admin', label: 'Administrator' },
|
|
712
|
+
{ value: 'user', label: 'User' },
|
|
713
|
+
{ value: 'guest', label: 'Guest' },
|
|
714
|
+
],
|
|
715
|
+
},
|
|
716
|
+
{
|
|
717
|
+
accessorKey: 'status',
|
|
718
|
+
header: 'Status',
|
|
719
|
+
editable: false, // Read-only column (won't become input in edit mode)
|
|
720
|
+
},
|
|
721
|
+
];
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
### Available Field Types
|
|
725
|
+
|
|
726
|
+
- **`text`**: Standard text input
|
|
727
|
+
- **`number`**: Numeric input with validation
|
|
728
|
+
- **`select`**: Dropdown select (requires `fieldOptions`)
|
|
729
|
+
- **`date`**: Date picker
|
|
730
|
+
- **`boolean`**: Checkbox
|
|
731
|
+
|
|
732
|
+
### Complete Inline Editing Example
|
|
733
|
+
|
|
734
|
+
```tsx
|
|
735
|
+
interface User {
|
|
736
|
+
id: string;
|
|
737
|
+
name: string;
|
|
738
|
+
email: string;
|
|
739
|
+
age: number;
|
|
740
|
+
role: 'admin' | 'user' | 'guest';
|
|
741
|
+
active: boolean;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
const columns: DataTableColumn<User>[] = [
|
|
745
|
+
{
|
|
746
|
+
accessorKey: 'name',
|
|
747
|
+
header: 'Name',
|
|
748
|
+
sortable: true,
|
|
749
|
+
editable: true,
|
|
750
|
+
fieldType: 'text',
|
|
751
|
+
},
|
|
752
|
+
{
|
|
753
|
+
accessorKey: 'email',
|
|
754
|
+
header: 'Email',
|
|
755
|
+
sortable: true,
|
|
756
|
+
editable: true,
|
|
757
|
+
fieldType: 'text',
|
|
758
|
+
},
|
|
759
|
+
{
|
|
760
|
+
accessorKey: 'age',
|
|
761
|
+
header: 'Age',
|
|
762
|
+
sortable: true,
|
|
763
|
+
editable: true,
|
|
764
|
+
fieldType: 'number',
|
|
765
|
+
},
|
|
766
|
+
{
|
|
767
|
+
accessorKey: 'role',
|
|
768
|
+
header: 'Role',
|
|
769
|
+
editable: true,
|
|
770
|
+
fieldType: 'select',
|
|
771
|
+
fieldOptions: [
|
|
772
|
+
{ value: 'admin', label: 'Admin' },
|
|
773
|
+
{ value: 'user', label: 'User' },
|
|
774
|
+
{ value: 'guest', label: 'Guest' },
|
|
775
|
+
],
|
|
776
|
+
},
|
|
777
|
+
{
|
|
778
|
+
accessorKey: 'active',
|
|
779
|
+
header: 'Active',
|
|
780
|
+
editable: true,
|
|
781
|
+
fieldType: 'boolean',
|
|
782
|
+
},
|
|
783
|
+
];
|
|
784
|
+
|
|
785
|
+
function UserManagement() {
|
|
786
|
+
const [users, setUsers] = useState<User[]>([]);
|
|
787
|
+
|
|
788
|
+
const handleEdit = async (row: User, data: Partial<User>) => {
|
|
789
|
+
// Update in database
|
|
790
|
+
const { error } = await supabase
|
|
791
|
+
.from('users')
|
|
792
|
+
.update(data)
|
|
793
|
+
.eq('id', row.id);
|
|
794
|
+
|
|
795
|
+
if (error) throw error;
|
|
796
|
+
|
|
797
|
+
// Update local state
|
|
798
|
+
setUsers(prev => prev.map(u => u.id === row.id ? { ...u, ...data } : u));
|
|
799
|
+
};
|
|
800
|
+
|
|
801
|
+
return (
|
|
802
|
+
<DataTable
|
|
803
|
+
data={users}
|
|
804
|
+
columns={columns}
|
|
805
|
+
features={{
|
|
806
|
+
editing: true,
|
|
807
|
+
// ... other features
|
|
808
|
+
}}
|
|
809
|
+
onEditRow={handleEdit}
|
|
810
|
+
/>
|
|
811
|
+
);
|
|
812
|
+
}
|
|
813
|
+
```
|
|
814
|
+
|
|
815
|
+
### How Inline Editing Works
|
|
816
|
+
|
|
817
|
+
1. User clicks "Edit" button on a row
|
|
818
|
+
2. Editable columns (those with `editable: true`) become input fields
|
|
819
|
+
3. Non-editable columns (those with `editable: false`) remain as text
|
|
820
|
+
4. Save/Cancel buttons replace the Edit button
|
|
821
|
+
5. On Save: `onEditRow(originalRow, editedData)` is called
|
|
822
|
+
6. On Cancel: Row returns to view mode without changes
|
|
823
|
+
|
|
824
|
+
### Mixing Editable and Non-Editable Columns
|
|
825
|
+
|
|
826
|
+
You can mix editable and non-editable columns in the same table:
|
|
827
|
+
|
|
828
|
+
```tsx
|
|
829
|
+
const columns = [
|
|
830
|
+
{
|
|
831
|
+
accessorKey: 'id',
|
|
832
|
+
header: 'ID',
|
|
833
|
+
editable: false, // Read-only ID field
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
accessorKey: 'name',
|
|
837
|
+
header: 'Name',
|
|
838
|
+
editable: true, // Can be edited
|
|
839
|
+
fieldType: 'text',
|
|
840
|
+
},
|
|
841
|
+
{
|
|
842
|
+
accessorKey: 'createdAt',
|
|
843
|
+
header: 'Created',
|
|
844
|
+
editable: false, // Read-only timestamp
|
|
845
|
+
cell: ({ row }) => formatDate(row.original.createdAt),
|
|
846
|
+
},
|
|
847
|
+
];
|
|
848
|
+
```
|
|
849
|
+
|
|
850
|
+
When in edit mode, only columns with `editable: true` will become input fields.
|
|
851
|
+
|
|
661
852
|
## Column Ordering
|
|
662
853
|
|
|
663
854
|
The DataTable component supports custom column ordering through the `columnOrder` prop, allowing you to control the exact position of columns including selection and actions columns.
|