@mohsinonxrm/pptb-fetchxml-studio 1.0.0 → 1.0.2

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 (78) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +1 -1
  3. package/dist/assets/index-DD9fzkbz.js +232 -0
  4. package/dist/index.html +70 -0
  5. package/index.html +0 -1
  6. package/npm-shrinkwrap.json +6329 -0
  7. package/package.json +95 -51
  8. package/CHANGELOG.md +0 -120
  9. package/eslint.config.js +0 -23
  10. package/public/vite.svg +0 -1
  11. package/src/app/AppShell.tsx +0 -1733
  12. package/src/assets/20px-Microsoft_Office_Excel_(2025/342/200/223present).svg.png +0 -0
  13. package/src/assets/react.svg +0 -1
  14. package/src/features/fetchxml/api/dataverseMetadata.ts +0 -192
  15. package/src/features/fetchxml/api/excelExport.ts +0 -318
  16. package/src/features/fetchxml/api/formattedValues.ts +0 -107
  17. package/src/features/fetchxml/api/pptbClient.ts +0 -2635
  18. package/src/features/fetchxml/model/displaySettings.ts +0 -18
  19. package/src/features/fetchxml/model/fetchxml.ts +0 -346
  20. package/src/features/fetchxml/model/fetchxmlIntellisense.ts +0 -583
  21. package/src/features/fetchxml/model/fetchxmlParser.ts +0 -708
  22. package/src/features/fetchxml/model/layoutxml.ts +0 -372
  23. package/src/features/fetchxml/model/nodes.ts +0 -255
  24. package/src/features/fetchxml/model/operators.ts +0 -624
  25. package/src/features/fetchxml/model/treeUtils.ts +0 -174
  26. package/src/features/fetchxml/state/builderStore.tsx +0 -1160
  27. package/src/features/fetchxml/state/cache.ts +0 -393
  28. package/src/features/fetchxml/ui/Dialogs/BulkDeleteDialog.tsx +0 -352
  29. package/src/features/fetchxml/ui/Dialogs/DeleteConfirmDialog.tsx +0 -396
  30. package/src/features/fetchxml/ui/Dialogs/SaveViewDialog.tsx +0 -612
  31. package/src/features/fetchxml/ui/Dialogs/SolutionPicker.tsx +0 -114
  32. package/src/features/fetchxml/ui/Dialogs/WorkflowPickerDialog.tsx +0 -437
  33. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/AttributeEditor.tsx +0 -214
  34. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/ConditionEditor.tsx +0 -533
  35. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/FetchOptionsEditor.tsx +0 -296
  36. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/FilterEditor.tsx +0 -106
  37. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/LinkEntityEditor.tsx +0 -433
  38. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/OrderEditor.tsx +0 -161
  39. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel/editors/ValueOfPicker.tsx +0 -194
  40. package/src/features/fetchxml/ui/LeftPane/PropertiesPanel.tsx +0 -225
  41. package/src/features/fetchxml/ui/LeftPane/TreeView.tsx +0 -604
  42. package/src/features/fetchxml/ui/RightPane/AddColumnsPanel.tsx +0 -800
  43. package/src/features/fetchxml/ui/RightPane/ColumnConfigDialog.tsx +0 -170
  44. package/src/features/fetchxml/ui/RightPane/DataGridCellRenderers.tsx +0 -356
  45. package/src/features/fetchxml/ui/RightPane/EditColumnsPanel.tsx +0 -372
  46. package/src/features/fetchxml/ui/RightPane/FetchXmlEditor.tsx +0 -399
  47. package/src/features/fetchxml/ui/RightPane/FormattedValueUtils.ts +0 -189
  48. package/src/features/fetchxml/ui/RightPane/LayoutXmlViewer.tsx +0 -171
  49. package/src/features/fetchxml/ui/RightPane/PreviewTabs.tsx +0 -471
  50. package/src/features/fetchxml/ui/RightPane/ResultsCommandBar.tsx +0 -430
  51. package/src/features/fetchxml/ui/RightPane/ResultsGrid.tsx +0 -983
  52. package/src/features/fetchxml/ui/RightPane/XmlTextArea.tsx +0 -65
  53. package/src/features/fetchxml/ui/Settings/SettingsDrawer.tsx +0 -175
  54. package/src/features/fetchxml/ui/Toolbar/EntitySelector.tsx +0 -788
  55. package/src/features/fetchxml/ui/Toolbar/LoadViewPicker.tsx +0 -274
  56. package/src/features/fetchxml/ui/Toolbar/SaveViewButton.tsx +0 -174
  57. package/src/main.tsx +0 -11
  58. package/src/shared/components/AttributePicker.tsx +0 -138
  59. package/src/shared/components/BetweenInputPicker.tsx +0 -120
  60. package/src/shared/components/BooleanValuePicker.tsx +0 -165
  61. package/src/shared/components/DateTimeInputPicker.tsx +0 -170
  62. package/src/shared/components/DynamicValueList.tsx +0 -128
  63. package/src/shared/components/ExcelIcon.tsx +0 -30
  64. package/src/shared/components/MultiValuePicker.tsx +0 -178
  65. package/src/shared/components/NumericInputPicker.tsx +0 -156
  66. package/src/shared/components/OptionSetValuePicker.tsx +0 -150
  67. package/src/shared/components/RelationshipPicker.tsx +0 -268
  68. package/src/shared/contexts/ThemeContext.tsx +0 -19
  69. package/src/shared/hooks/useAccessMode.ts +0 -77
  70. package/src/shared/hooks/useLazyMetadata.ts +0 -132
  71. package/src/shared/hooks/usePptbContext.ts +0 -170
  72. package/src/shared/hooks/usePublisherFilter.ts +0 -214
  73. package/src/shared/hooks/useSolutionFilter.ts +0 -162
  74. package/src/shared/utils/debug.ts +0 -87
  75. package/tsconfig.app.json +0 -28
  76. package/tsconfig.json +0 -7
  77. package/tsconfig.node.json +0 -26
  78. 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.2",
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://raw.githubusercontent.com/mohsinonxrm/pptb-mxrm-fetchxml-studio/refs/heads/main/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>