@mohsinonxrm/pptb-fetchxml-studio 1.0.0 → 1.0.1
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/LICENSE +661 -0
- package/dist/assets/index-DD9fzkbz.js +232 -0
- package/dist/index.html +70 -0
- package/index.html +0 -1
- package/npm-shrinkwrap.json +6329 -0
- package/package.json +95 -51
- package/CHANGELOG.md +0 -120
- package/eslint.config.js +0 -23
- package/public/vite.svg +0 -1
- package/src/app/AppShell.tsx +0 -1733
- package/src/assets/20px-Microsoft_Office_Excel_(2025/342/200/223present).svg.png +0 -0
- package/src/assets/react.svg +0 -1
- package/src/features/fetchxml/api/dataverseMetadata.ts +0 -192
- package/src/features/fetchxml/api/excelExport.ts +0 -318
- package/src/features/fetchxml/api/formattedValues.ts +0 -107
- package/src/features/fetchxml/api/pptbClient.ts +0 -2635
- package/src/features/fetchxml/model/displaySettings.ts +0 -18
- package/src/features/fetchxml/model/fetchxml.ts +0 -346
- package/src/features/fetchxml/model/fetchxmlIntellisense.ts +0 -583
- package/src/features/fetchxml/model/fetchxmlParser.ts +0 -708
- package/src/features/fetchxml/model/layoutxml.ts +0 -372
- package/src/features/fetchxml/model/nodes.ts +0 -255
- package/src/features/fetchxml/model/operators.ts +0 -624
- package/src/features/fetchxml/model/treeUtils.ts +0 -174
- package/src/features/fetchxml/state/builderStore.tsx +0 -1160
- package/src/features/fetchxml/state/cache.ts +0 -393
- package/src/features/fetchxml/ui/Dialogs/BulkDeleteDialog.tsx +0 -352
- package/src/features/fetchxml/ui/Dialogs/DeleteConfirmDialog.tsx +0 -396
- package/src/features/fetchxml/ui/Dialogs/SaveViewDialog.tsx +0 -612
- package/src/features/fetchxml/ui/Dialogs/SolutionPicker.tsx +0 -114
- package/src/features/fetchxml/ui/Dialogs/WorkflowPickerDialog.tsx +0 -437
- package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/AttributeEditor.tsx +0 -214
- package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/ConditionEditor.tsx +0 -533
- package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/FetchOptionsEditor.tsx +0 -296
- package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/FilterEditor.tsx +0 -106
- package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/LinkEntityEditor.tsx +0 -433
- package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/OrderEditor.tsx +0 -161
- package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/ValueOfPicker.tsx +0 -194
- package/src/features/fetchxml/ui/LeftPane/PropertiesPanel.tsx +0 -225
- package/src/features/fetchxml/ui/LeftPane/TreeView.tsx +0 -604
- package/src/features/fetchxml/ui/RightPane/AddColumnsPanel.tsx +0 -800
- package/src/features/fetchxml/ui/RightPane/ColumnConfigDialog.tsx +0 -170
- package/src/features/fetchxml/ui/RightPane/DataGridCellRenderers.tsx +0 -356
- package/src/features/fetchxml/ui/RightPane/EditColumnsPanel.tsx +0 -372
- package/src/features/fetchxml/ui/RightPane/FetchXmlEditor.tsx +0 -399
- package/src/features/fetchxml/ui/RightPane/FormattedValueUtils.ts +0 -189
- package/src/features/fetchxml/ui/RightPane/LayoutXmlViewer.tsx +0 -171
- package/src/features/fetchxml/ui/RightPane/PreviewTabs.tsx +0 -471
- package/src/features/fetchxml/ui/RightPane/ResultsCommandBar.tsx +0 -430
- package/src/features/fetchxml/ui/RightPane/ResultsGrid.tsx +0 -983
- package/src/features/fetchxml/ui/RightPane/XmlTextArea.tsx +0 -65
- package/src/features/fetchxml/ui/Settings/SettingsDrawer.tsx +0 -175
- package/src/features/fetchxml/ui/Toolbar/EntitySelector.tsx +0 -788
- package/src/features/fetchxml/ui/Toolbar/LoadViewPicker.tsx +0 -274
- package/src/features/fetchxml/ui/Toolbar/SaveViewButton.tsx +0 -174
- package/src/main.tsx +0 -11
- package/src/shared/components/AttributePicker.tsx +0 -138
- package/src/shared/components/BetweenInputPicker.tsx +0 -120
- package/src/shared/components/BooleanValuePicker.tsx +0 -165
- package/src/shared/components/DateTimeInputPicker.tsx +0 -170
- package/src/shared/components/DynamicValueList.tsx +0 -128
- package/src/shared/components/ExcelIcon.tsx +0 -30
- package/src/shared/components/MultiValuePicker.tsx +0 -178
- package/src/shared/components/NumericInputPicker.tsx +0 -156
- package/src/shared/components/OptionSetValuePicker.tsx +0 -150
- package/src/shared/components/RelationshipPicker.tsx +0 -268
- package/src/shared/contexts/ThemeContext.tsx +0 -19
- package/src/shared/hooks/useAccessMode.ts +0 -77
- package/src/shared/hooks/useLazyMetadata.ts +0 -132
- package/src/shared/hooks/usePptbContext.ts +0 -170
- package/src/shared/hooks/usePublisherFilter.ts +0 -214
- package/src/shared/hooks/useSolutionFilter.ts +0 -162
- package/src/shared/utils/debug.ts +0 -87
- package/tsconfig.app.json +0 -28
- package/tsconfig.json +0 -7
- package/tsconfig.node.json +0 -26
- package/vite.config.ts +0 -7
package/package.json
CHANGED
|
@@ -1,53 +1,97 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
2
|
+
"name": "@mohsinonxrm/pptb-fetchxml-studio",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"displayName": "FetchXML Studio",
|
|
6
|
+
"description": "A powerful, modern FetchXML query builder and data explorer for Microsoft Dataverse and Dynamics 365.",
|
|
7
|
+
"author": "Mohsin On xRM",
|
|
8
|
+
"main": "index.html",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/mohsinonxrm/pptb-mxrm-fetchxml-studio.git"
|
|
12
|
+
},
|
|
13
|
+
"contributors": [
|
|
14
|
+
{
|
|
15
|
+
"name": "Mohsin On xRM",
|
|
16
|
+
"url": "https://github.com/mohsinonxrm"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "Jonas Rapp",
|
|
20
|
+
"url": "https://github.com/rappen"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"license": "AGPL-3.0-only",
|
|
24
|
+
"keywords": [
|
|
25
|
+
"powerplatform",
|
|
26
|
+
"dataverse",
|
|
27
|
+
"toolbox",
|
|
28
|
+
"power-apps",
|
|
29
|
+
"dynamics-365",
|
|
30
|
+
"fetchxml",
|
|
31
|
+
"crm",
|
|
32
|
+
"xrm",
|
|
33
|
+
"microsoft"
|
|
34
|
+
],
|
|
35
|
+
"cspExceptions": {
|
|
36
|
+
"connect-src": [
|
|
37
|
+
"https://*.dynamics.com",
|
|
38
|
+
"https://*.crm*.dynamics.com"
|
|
39
|
+
],
|
|
40
|
+
"script-src": [
|
|
41
|
+
"https://cdn.jsdelivr.net"
|
|
42
|
+
],
|
|
43
|
+
"style-src": [
|
|
44
|
+
"https://cdn.jsdelivr.net"
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
"bugs": {
|
|
48
|
+
"url": "https://github.com/mohsinonxrm/pptb-mxrm-fetchxml-studio/issues"
|
|
49
|
+
},
|
|
50
|
+
"configurations": {
|
|
51
|
+
"repository": "https://github.com/mohsinonxrm/pptb-mxrm-fetchxml-studio",
|
|
52
|
+
"website": "https://fetchxml.studio",
|
|
53
|
+
"iconUrl": "",
|
|
54
|
+
"readmeUrl": "https://github.com/mohsinonxrm/pptb-mxrm-fetchxml-studio/blob/ec677bc3884f0a7f88d663a72cf073ef9c638063/README.md"
|
|
55
|
+
},
|
|
56
|
+
"files": [
|
|
57
|
+
"dist",
|
|
58
|
+
"npm-shrinkwrap.json"
|
|
59
|
+
],
|
|
60
|
+
"scripts": {
|
|
61
|
+
"dev": "vite",
|
|
62
|
+
"build": "tsc -b && vite build",
|
|
63
|
+
"lint": "eslint .",
|
|
64
|
+
"preview": "vite preview",
|
|
65
|
+
"finalize-package": "npm run build && npm shrinkwrap"
|
|
66
|
+
},
|
|
67
|
+
"dependencies": {
|
|
68
|
+
"@fluentui-contrib/react-data-grid-react-window": "^1.4.1",
|
|
69
|
+
"@fluentui/react-calendar-compat": "^0.3.14",
|
|
70
|
+
"@fluentui/react-components": "^9.72.4",
|
|
71
|
+
"@fluentui/react-datepicker-compat": "^0.6.19",
|
|
72
|
+
"@fluentui/react-icons": "^2.0.313",
|
|
73
|
+
"@fluentui/react-timepicker-compat": "^0.4.24",
|
|
74
|
+
"@monaco-editor/react": "^4.7.0",
|
|
75
|
+
"exceljs": "^4.4.0",
|
|
76
|
+
"react": "^19.1.1",
|
|
77
|
+
"react-dom": "^19.1.1",
|
|
78
|
+
"react-window": "^2.2.3"
|
|
79
|
+
},
|
|
80
|
+
"devDependencies": {
|
|
81
|
+
"@eslint/js": "^9.36.0",
|
|
82
|
+
"@pptb/types": "^1.0.7",
|
|
83
|
+
"@types/node": "^24.6.0",
|
|
84
|
+
"@types/react": "^19.1.16",
|
|
85
|
+
"@types/react-dom": "^19.1.9",
|
|
86
|
+
"@types/react-window": "^1.8.8",
|
|
87
|
+
"@vitejs/plugin-react": "^5.1.0",
|
|
88
|
+
"eslint": "^9.36.0",
|
|
89
|
+
"eslint-plugin-react-hooks": "^5.2.0",
|
|
90
|
+
"eslint-plugin-react-refresh": "^0.4.22",
|
|
91
|
+
"globals": "^16.4.0",
|
|
92
|
+
"monaco-editor": "^0.54.0",
|
|
93
|
+
"typescript": "~5.9.3",
|
|
94
|
+
"typescript-eslint": "^8.45.0",
|
|
95
|
+
"vite": "^7.1.12"
|
|
96
|
+
}
|
|
53
97
|
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to FetchXML Studio will be documented in this file.
|
|
4
|
-
|
|
5
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
-
|
|
8
|
-
## [1.0.0] - 2024-12-15
|
|
9
|
-
|
|
10
|
-
### 🎉 Initial Release
|
|
11
|
-
|
|
12
|
-
FetchXML Studio v1.0.0 - A powerful FetchXML query builder for PowerPlatform Toolbox.
|
|
13
|
-
|
|
14
|
-
### ✨ Features
|
|
15
|
-
|
|
16
|
-
#### Query Builder
|
|
17
|
-
- Tree-based visual query builder with hierarchical FetchXML structure
|
|
18
|
-
- Full entity, attribute, filter, order, and link-entity support
|
|
19
|
-
- Context-aware properties panel for each node type
|
|
20
|
-
- Nested filter groups with AND/OR logic
|
|
21
|
-
- Support for all FetchXML operators (60+ operators)
|
|
22
|
-
- Aggregate queries with groupby and distinct
|
|
23
|
-
- Query hints for performance optimization
|
|
24
|
-
|
|
25
|
-
#### Relationships & Joins
|
|
26
|
-
- Relationship picker with 1:N, N:1, N:N categorization
|
|
27
|
-
- Inner and outer join support
|
|
28
|
-
- Filter link-entity for any/all/not any/not all scenarios
|
|
29
|
-
- Value-of conditions for cross-entity comparisons
|
|
30
|
-
- Entity name conditions for outer join filtering
|
|
31
|
-
|
|
32
|
-
#### Results Grid
|
|
33
|
-
- Virtualized DataGrid for large datasets (react-window)
|
|
34
|
-
- Rich cell rendering for lookups, option sets, dates, currency
|
|
35
|
-
- Multi-column sorting (click + Shift+click)
|
|
36
|
-
- Row selection (single and multi-select)
|
|
37
|
-
- Resizable and reorderable columns
|
|
38
|
-
- Formatted values with raw value toggle
|
|
39
|
-
|
|
40
|
-
#### FetchXML Editor
|
|
41
|
-
- Monaco editor with XML syntax highlighting
|
|
42
|
-
- Bi-directional editing (visual ↔ XML)
|
|
43
|
-
- Parse FetchXML to visual builder
|
|
44
|
-
- Copy to clipboard
|
|
45
|
-
- LayoutXML preview tab
|
|
46
|
-
|
|
47
|
-
#### Views
|
|
48
|
-
- Load system and personal views
|
|
49
|
-
- Optimized view execution via SavedQuery/UserQuery APIs
|
|
50
|
-
- Save queries as personal views
|
|
51
|
-
- Update existing views
|
|
52
|
-
- Solution-aware save (add to solution)
|
|
53
|
-
|
|
54
|
-
#### Data Operations
|
|
55
|
-
- Export to Excel with native data types
|
|
56
|
-
- Delete selected records
|
|
57
|
-
- Bulk delete jobs (async)
|
|
58
|
-
- Run on-demand workflows on selection
|
|
59
|
-
- Batch progress tracking with ETA
|
|
60
|
-
|
|
61
|
-
#### User Experience
|
|
62
|
-
- Dark/Light theme support (follows PPTB theme)
|
|
63
|
-
- Lazy metadata loading
|
|
64
|
-
- Intelligent caching (per-session)
|
|
65
|
-
- Resizable split panes
|
|
66
|
-
- Keyboard shortcuts (Ctrl+Enter to execute)
|
|
67
|
-
|
|
68
|
-
#### Security
|
|
69
|
-
- Privilege-aware operations
|
|
70
|
-
- Export/Delete privilege checks
|
|
71
|
-
- Bulk delete privilege validation
|
|
72
|
-
- Workflow execution privilege checks
|
|
73
|
-
|
|
74
|
-
### 🏗️ Technical
|
|
75
|
-
|
|
76
|
-
- Built with React 19 and TypeScript 5.9
|
|
77
|
-
- Fluent UI v9 components
|
|
78
|
-
- Monaco Editor integration
|
|
79
|
-
- ExcelJS for native Excel export
|
|
80
|
-
- Vite build tooling
|
|
81
|
-
- PowerPlatform Toolbox integration via @pptb/types
|
|
82
|
-
|
|
83
|
-
### 📚 Documentation
|
|
84
|
-
|
|
85
|
-
- Comprehensive README with feature overview
|
|
86
|
-
- Debug logging system documentation
|
|
87
|
-
- Project structure guide
|
|
88
|
-
- Contributing guidelines
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## Development History
|
|
93
|
-
|
|
94
|
-
### Pre-release commits (dev branch)
|
|
95
|
-
|
|
96
|
-
- `feat: Beta release enhancements - Settings, Export, and UX improvements`
|
|
97
|
-
- `feat(preview): add LayoutXML tab to preview pane`
|
|
98
|
-
- `feat(commands): add record action commands - delete, bulk delete, workflow`
|
|
99
|
-
- `feat(columns): Add/Edit Columns panels with related entity support`
|
|
100
|
-
- `feat(export): add Export to Excel with status feedback and privilege check`
|
|
101
|
-
- `feat(paging): fix paging with cookies and page size support`
|
|
102
|
-
- `feat(grid): multi-entity metadata & column display name fixes`
|
|
103
|
-
- `feat(builder): Sprint 1 - Foundation & Layout improvements`
|
|
104
|
-
- `feat(save): implement Save View functionality`
|
|
105
|
-
- `feat(sort): Add multi-column sort with FetchXML integration`
|
|
106
|
-
- `feat(results): Add Column from Results Grid`
|
|
107
|
-
- `feat(views): Load view LayoutXML for column configuration`
|
|
108
|
-
- `feat(layout): Add column resize and reorder`
|
|
109
|
-
- `feat(layout): Add LayoutXML foundation`
|
|
110
|
-
- `feat(filter): Add filter link-entity support for any/not any/all scenarios`
|
|
111
|
-
- `feat(condition): Add valueof cross-entity comparison`
|
|
112
|
-
- `feat(condition): Add valueof same-row column comparison`
|
|
113
|
-
- `feat(condition): Add entityname support for outer join filtering`
|
|
114
|
-
- `feat(views): Add Load View picker and optimized view execution`
|
|
115
|
-
- `feat(parser): Add FetchXML parser with Monaco editor dialog`
|
|
116
|
-
- `feat: Implement Phases 1-4 - DataGrid UI polish`
|
|
117
|
-
- `feat: add filter consistency, cascading validation, and global metadata caching`
|
|
118
|
-
- `feat(entity-selector): implement advanced filtering with publisher/solution multiselect`
|
|
119
|
-
- `feat(ui): add resizable panes with visual grip indicators and command bar`
|
|
120
|
-
- `Initial commit - setup main branch`
|
package/eslint.config.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import js from '@eslint/js'
|
|
2
|
-
import globals from 'globals'
|
|
3
|
-
import reactHooks from 'eslint-plugin-react-hooks'
|
|
4
|
-
import reactRefresh from 'eslint-plugin-react-refresh'
|
|
5
|
-
import tseslint from 'typescript-eslint'
|
|
6
|
-
import { defineConfig, globalIgnores } from 'eslint/config'
|
|
7
|
-
|
|
8
|
-
export default defineConfig([
|
|
9
|
-
globalIgnores(['dist']),
|
|
10
|
-
{
|
|
11
|
-
files: ['**/*.{ts,tsx}'],
|
|
12
|
-
extends: [
|
|
13
|
-
js.configs.recommended,
|
|
14
|
-
tseslint.configs.recommended,
|
|
15
|
-
reactHooks.configs['recommended-latest'],
|
|
16
|
-
reactRefresh.configs.vite,
|
|
17
|
-
],
|
|
18
|
-
languageOptions: {
|
|
19
|
-
ecmaVersion: 2020,
|
|
20
|
-
globals: globals.browser,
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
])
|
package/public/vite.svg
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|