Skip to content

Commit 1eca94d

Browse files
authored
build: Release (#3398)
2 parents 7d2b612 + 26a297a commit 1eca94d

10 files changed

Lines changed: 207 additions & 67 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ This section provides a comprehensive reference for all Parse Dashboard configur
215215
| `secondaryBackgroundColor` | String | yes | - | - | - | `"#FF4500"` | Secondary background color (CSS value). |
216216
| `supportedPushLocales` | Array<String> | yes | - | - | - | `["en","fr"]` | Supported locales for push notifications. |
217217
| `preventSchemaEdits` | Boolean | yes | `false` | - | - | `true` | Prevent schema modifications through the dashboard. |
218+
| `preventDataExport` | Boolean | yes | `false` | - | - | `true` | Hide all data browser export options (export data, export selected/all rows, export schema). |
218219
| `columnPreference` | Object | yes | - | - | - | `{"_User":[...]}` | Column visibility/sorting/filtering preferences. See [column preferences details](#prevent-columns-sorting). |
219220
| `classPreference` | Object | yes | - | - | - | `{"_Role":{...}}` | Persistent filters for all users. See [persistent filters details](#persistent-filters). |
220221
| `enableSecurityChecks` | Boolean | yes | `false` | - | - | `true` | Enable security checks under App Settings > Security. |

changelogs/CHANGELOG_alpha.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
# [9.2.0-alpha.1](https://github.com/parse-community/parse-dashboard/compare/9.1.2-alpha.1...9.2.0-alpha.1) (2026-07-04)
2+
3+
4+
### Features
5+
6+
* Add preventDataExport option to disable data browser export ([#3380](https://github.com/parse-community/parse-dashboard/issues/3380)) ([6daa164](https://github.com/parse-community/parse-dashboard/commit/6daa164d577b1016363e4480cdddf4c4364d5cd5))
7+
8+
## [9.1.2-alpha.1](https://github.com/parse-community/parse-dashboard/compare/9.1.1...9.1.2-alpha.1) (2026-05-18)
9+
10+
11+
### Bug Fixes
12+
13+
* Chart not displayed when formula references an undefined field ([#3360](https://github.com/parse-community/parse-dashboard/issues/3360)) ([9666935](https://github.com/parse-community/parse-dashboard/commit/9666935659a28761c9e69242fe5aef730dffdfbc))
14+
115
## [9.1.1-alpha.1](https://github.com/parse-community/parse-dashboard/compare/9.1.0...9.1.1-alpha.1) (2026-04-07)
216

317

package-lock.json

Lines changed: 93 additions & 49 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "parse-dashboard",
3-
"version": "9.1.1",
3+
"version": "9.2.0-alpha.1",
44
"repository": {
55
"type": "git",
66
"url": "https://github.com/parse-community/parse-dashboard"
@@ -45,9 +45,9 @@
4545
"commander": "13.1.0",
4646
"connect-flash": "0.1.1",
4747
"copy-to-clipboard": "3.3.3",
48-
"core-js": "3.48.0",
48+
"core-js": "3.49.0",
4949
"csrf-sync": "4.2.1",
50-
"diff": "8.0.3",
50+
"diff": "8.0.4",
5151
"expr-eval-fork": "3.0.3",
5252
"express": "5.2.1",
5353
"express-session": "1.19.0",
@@ -118,20 +118,20 @@
118118
"jest-environment-jsdom": "30.0.5",
119119
"madge": "8.0.0",
120120
"marked": "17.0.5",
121-
"mongodb-runner": "^6.6.0",
121+
"mongodb-runner": "6.7.3",
122122
"parse-server": "9.7.0",
123123
"prettier": "3.8.1",
124124
"puppeteer": "24.37.2",
125125
"react-test-renderer": "16.13.1",
126-
"sass": "1.98.0",
126+
"sass": "1.99.0",
127127
"sass-loader": "16.0.7",
128128
"semantic-release": "25.0.3",
129129
"semver": "7.7.4",
130130
"style-loader": "3.3.1",
131131
"typescript": "6.0.2",
132132
"webpack": "5.105.1",
133133
"webpack-cli": "7.0.2",
134-
"ws": "8.19.0",
134+
"ws": "8.20.0",
135135
"yaml": "2.8.3"
136136
},
137137
"scripts": {

src/dashboard/Data/Browser/BrowserToolbar.react.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ const BrowserToolbar = ({
6464

6565
enableDeleteAllRows,
6666
enableExportClass,
67+
enableExportData,
6768
enableSecurityDialog,
6869

6970
enableColumnManipulation,
@@ -384,13 +385,20 @@ const BrowserToolbar = ({
384385
disabled={isUnique || isPendingEditCloneRows}
385386
setCurrent={setCurrent}
386387
>
387-
<MenuItem
388-
disabled={!selectionLength}
389-
text={`Export ${selectionLength} selected ${selectionLength <= 1 ? 'row' : 'rows'}`}
390-
onClick={() => onExportSelectedRows(selection)}
391-
/>
392-
<MenuItem text={'Export all rows'} onClick={() => onExportSelectedRows({ '*': true })} />
393-
<MenuItem text={'Export schema'} onClick={() => onExportSchema()} />
388+
{enableExportData && (
389+
<>
390+
<MenuItem
391+
disabled={!selectionLength}
392+
text={`Export ${selectionLength} selected ${selectionLength <= 1 ? 'row' : 'rows'}`}
393+
onClick={() => onExportSelectedRows(selection)}
394+
/>
395+
<MenuItem
396+
text={'Export all rows'}
397+
onClick={() => onExportSelectedRows({ '*': true })}
398+
/>
399+
<MenuItem text={'Export schema'} onClick={() => onExportSchema()} />
400+
</>
401+
)}
394402
{!relation && (
395403
<>
396404
<Separator />

src/dashboard/Data/Browser/DataBrowser.react.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2723,7 +2723,7 @@ export default class DataBrowser extends React.Component {
27232723
app,
27242724
...other
27252725
} = this.props;
2726-
const { preventSchemaEdits, applicationId } = app;
2726+
const { preventSchemaEdits, preventDataExport, applicationId } = app;
27272727

27282728
// Calculate effective panel width based on actual displayed panels
27292729
// When panelCount > 1 but fewer panels are actually displayed, reduce width proportionally
@@ -2975,7 +2975,10 @@ export default class DataBrowser extends React.Component {
29752975
enableDeleteAllRows={
29762976
app.serverInfo.features.schemas.clearAllDataFromClass && !preventSchemaEdits
29772977
}
2978-
enableExportClass={app.serverInfo.features.schemas.exportClass && !preventSchemaEdits}
2978+
enableExportClass={
2979+
app.serverInfo.features.schemas.exportClass && !preventSchemaEdits && !preventDataExport
2980+
}
2981+
enableExportData={!preventDataExport}
29792982
enableSecurityDialog={
29802983
app.serverInfo.features.schemas.editClassLevelPermissions &&
29812984
!disableSecurityDialog &&

src/lib/FormulaEvaluator.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,19 @@ export function evaluateFormula(formula, variables) {
140140
try {
141141
const processedFormula = preprocessFormula(formula);
142142
const expr = parser.parse(processedFormula);
143-
let result = expr.evaluate(variables);
143+
144+
// Default any variables referenced by the formula but missing from the
145+
// provided variables to 0. This keeps charts rendering when a referenced
146+
// field has no value on a row (consistent with the "sum" operator, which
147+
// already treats missing fields as 0).
148+
const safeVariables = { ...(variables || {}) };
149+
for (const varName of expr.variables()) {
150+
if (!(varName in safeVariables)) {
151+
safeVariables[varName] = 0;
152+
}
153+
}
154+
155+
let result = expr.evaluate(safeVariables);
144156

145157
// Convert boolean results to numbers (for comparison operators)
146158
if (typeof result === 'boolean') {

0 commit comments

Comments
 (0)