@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.
Files changed (77) hide show
  1. package/LICENSE +661 -0
  2. package/dist/assets/index-DD9fzkbz.js +232 -0
  3. package/dist/index.html +70 -0
  4. package/index.html +0 -1
  5. package/npm-shrinkwrap.json +6329 -0
  6. package/package.json +95 -51
  7. package/CHANGELOG.md +0 -120
  8. package/eslint.config.js +0 -23
  9. package/public/vite.svg +0 -1
  10. package/src/app/AppShell.tsx +0 -1733
  11. package/src/assets/20px-Microsoft_Office_Excel_(2025/342/200/223present).svg.png +0 -0
  12. package/src/assets/react.svg +0 -1
  13. package/src/features/fetchxml/api/dataverseMetadata.ts +0 -192
  14. package/src/features/fetchxml/api/excelExport.ts +0 -318
  15. package/src/features/fetchxml/api/formattedValues.ts +0 -107
  16. package/src/features/fetchxml/api/pptbClient.ts +0 -2635
  17. package/src/features/fetchxml/model/displaySettings.ts +0 -18
  18. package/src/features/fetchxml/model/fetchxml.ts +0 -346
  19. package/src/features/fetchxml/model/fetchxmlIntellisense.ts +0 -583
  20. package/src/features/fetchxml/model/fetchxmlParser.ts +0 -708
  21. package/src/features/fetchxml/model/layoutxml.ts +0 -372
  22. package/src/features/fetchxml/model/nodes.ts +0 -255
  23. package/src/features/fetchxml/model/operators.ts +0 -624
  24. package/src/features/fetchxml/model/treeUtils.ts +0 -174
  25. package/src/features/fetchxml/state/builderStore.tsx +0 -1160
  26. package/src/features/fetchxml/state/cache.ts +0 -393
  27. package/src/features/fetchxml/ui/Dialogs/BulkDeleteDialog.tsx +0 -352
  28. package/src/features/fetchxml/ui/Dialogs/DeleteConfirmDialog.tsx +0 -396
  29. package/src/features/fetchxml/ui/Dialogs/SaveViewDialog.tsx +0 -612
  30. package/src/features/fetchxml/ui/Dialogs/SolutionPicker.tsx +0 -114
  31. package/src/features/fetchxml/ui/Dialogs/WorkflowPickerDialog.tsx +0 -437
  32. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/AttributeEditor.tsx +0 -214
  33. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/ConditionEditor.tsx +0 -533
  34. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/FetchOptionsEditor.tsx +0 -296
  35. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/FilterEditor.tsx +0 -106
  36. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/LinkEntityEditor.tsx +0 -433
  37. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/OrderEditor.tsx +0 -161
  38. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/ValueOfPicker.tsx +0 -194
  39. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel.tsx +0 -225
  40. package/src/features/fetchxml/ui/LeftPane/TreeView.tsx +0 -604
  41. package/src/features/fetchxml/ui/RightPane/AddColumnsPanel.tsx +0 -800
  42. package/src/features/fetchxml/ui/RightPane/ColumnConfigDialog.tsx +0 -170
  43. package/src/features/fetchxml/ui/RightPane/DataGridCellRenderers.tsx +0 -356
  44. package/src/features/fetchxml/ui/RightPane/EditColumnsPanel.tsx +0 -372
  45. package/src/features/fetchxml/ui/RightPane/FetchXmlEditor.tsx +0 -399
  46. package/src/features/fetchxml/ui/RightPane/FormattedValueUtils.ts +0 -189
  47. package/src/features/fetchxml/ui/RightPane/LayoutXmlViewer.tsx +0 -171
  48. package/src/features/fetchxml/ui/RightPane/PreviewTabs.tsx +0 -471
  49. package/src/features/fetchxml/ui/RightPane/ResultsCommandBar.tsx +0 -430
  50. package/src/features/fetchxml/ui/RightPane/ResultsGrid.tsx +0 -983
  51. package/src/features/fetchxml/ui/RightPane/XmlTextArea.tsx +0 -65
  52. package/src/features/fetchxml/ui/Settings/SettingsDrawer.tsx +0 -175
  53. package/src/features/fetchxml/ui/Toolbar/EntitySelector.tsx +0 -788
  54. package/src/features/fetchxml/ui/Toolbar/LoadViewPicker.tsx +0 -274
  55. package/src/features/fetchxml/ui/Toolbar/SaveViewButton.tsx +0 -174
  56. package/src/main.tsx +0 -11
  57. package/src/shared/components/AttributePicker.tsx +0 -138
  58. package/src/shared/components/BetweenInputPicker.tsx +0 -120
  59. package/src/shared/components/BooleanValuePicker.tsx +0 -165
  60. package/src/shared/components/DateTimeInputPicker.tsx +0 -170
  61. package/src/shared/components/DynamicValueList.tsx +0 -128
  62. package/src/shared/components/ExcelIcon.tsx +0 -30
  63. package/src/shared/components/MultiValuePicker.tsx +0 -178
  64. package/src/shared/components/NumericInputPicker.tsx +0 -156
  65. package/src/shared/components/OptionSetValuePicker.tsx +0 -150
  66. package/src/shared/components/RelationshipPicker.tsx +0 -268
  67. package/src/shared/contexts/ThemeContext.tsx +0 -19
  68. package/src/shared/hooks/useAccessMode.ts +0 -77
  69. package/src/shared/hooks/useLazyMetadata.ts +0 -132
  70. package/src/shared/hooks/usePptbContext.ts +0 -170
  71. package/src/shared/hooks/usePublisherFilter.ts +0 -214
  72. package/src/shared/hooks/useSolutionFilter.ts +0 -162
  73. package/src/shared/utils/debug.ts +0 -87
  74. package/tsconfig.app.json +0 -28
  75. package/tsconfig.json +0 -7
  76. package/tsconfig.node.json +0 -26
  77. package/vite.config.ts +0 -7
package/package.json CHANGED
@@ -1,53 +1,97 @@
1
1
  {
2
- "name": "@mohsinonxrm/pptb-fetchxml-studio",
3
- "version": "1.0.0",
4
- "type": "module",
5
- "cspExceptions": {
6
- "connect-src": [
7
- "https://*.dynamics.com",
8
- "https://*.crm*.dynamics.com"
9
- ],
10
- "script-src": [
11
- "https://cdn.jsdelivr.net"
12
- ],
13
- "style-src": [
14
- "https://cdn.jsdelivr.net"
15
- ]
16
- },
17
- "scripts": {
18
- "dev": "vite",
19
- "build": "tsc -b && vite build",
20
- "lint": "eslint .",
21
- "preview": "vite preview"
22
- },
23
- "dependencies": {
24
- "@fluentui-contrib/react-data-grid-react-window": "^1.4.1",
25
- "@fluentui/react-calendar-compat": "^0.3.14",
26
- "@fluentui/react-components": "^9.72.4",
27
- "@fluentui/react-datepicker-compat": "^0.6.19",
28
- "@fluentui/react-icons": "^2.0.313",
29
- "@fluentui/react-timepicker-compat": "^0.4.24",
30
- "@monaco-editor/react": "^4.7.0",
31
- "exceljs": "^4.4.0",
32
- "react": "^19.1.1",
33
- "react-dom": "^19.1.1",
34
- "react-window": "^2.2.3"
35
- },
36
- "devDependencies": {
37
- "@eslint/js": "^9.36.0",
38
- "@pptb/types": "^1.0.7",
39
- "@types/node": "^24.6.0",
40
- "@types/react": "^19.1.16",
41
- "@types/react-dom": "^19.1.9",
42
- "@types/react-window": "^1.8.8",
43
- "@vitejs/plugin-react": "^5.1.0",
44
- "eslint": "^9.36.0",
45
- "eslint-plugin-react-hooks": "^5.2.0",
46
- "eslint-plugin-react-refresh": "^0.4.22",
47
- "globals": "^16.4.0",
48
- "monaco-editor": "^0.54.0",
49
- "typescript": "~5.9.3",
50
- "typescript-eslint": "^8.45.0",
51
- "vite": "^7.1.12"
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>