Skip to content

Commit 0258d25

Browse files
authored
build: Release (#2449)
2 parents 5abcbc9 + 46eee53 commit 0258d25

19 files changed

+481
-53
lines changed

.github/workflows/ci.yml

+3
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,6 @@ jobs:
151151
run: ./scripts/before_script.sh
152152
env:
153153
CI: true
154+
concurrency:
155+
group: ${{ github.workflow }}-${{ github.ref }}
156+
cancel-in-progress: true

changelogs/CHANGELOG_alpha.md

+83
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,86 @@
1+
# [5.2.0-alpha.11](https://github.com/ParsePlatform/parse-dashboard/compare/5.2.0-alpha.10...5.2.0-alpha.11) (2023-06-08)
2+
3+
4+
### Bug Fixes
5+
6+
* Scroll position is preserved when re-opening the same class in data browser via navigation bar ([#2445](https://github.com/ParsePlatform/parse-dashboard/issues/2445)) ([667675c](https://github.com/ParsePlatform/parse-dashboard/commit/667675c031b0483be210a88da3b159f5f815d6fb))
7+
8+
# [5.2.0-alpha.10](https://github.com/ParsePlatform/parse-dashboard/compare/5.2.0-alpha.9...5.2.0-alpha.10) (2023-06-01)
9+
10+
11+
### Bug Fixes
12+
13+
* Option missing for Parse Config parameter to require master key ([#2440](https://github.com/ParsePlatform/parse-dashboard/issues/2440)) ([6623369](https://github.com/ParsePlatform/parse-dashboard/commit/66233698b333422f306dc7024949aef2ea028f34))
14+
15+
# [5.2.0-alpha.9](https://github.com/ParsePlatform/parse-dashboard/compare/5.2.0-alpha.8...5.2.0-alpha.9) (2023-05-27)
16+
17+
18+
### Bug Fixes
19+
20+
* Dashboard crashes when adding a row with modal in a class that contains a pointer to another class that contains an array of pointers ([#2416](https://github.com/ParsePlatform/parse-dashboard/issues/2416)) ([286269f](https://github.com/ParsePlatform/parse-dashboard/commit/286269f3e2c4e1c83b14003ce72caaf1f39b16c1))
21+
22+
# [5.2.0-alpha.8](https://github.com/ParsePlatform/parse-dashboard/compare/5.2.0-alpha.7...5.2.0-alpha.8) (2023-05-27)
23+
24+
25+
### Bug Fixes
26+
27+
* Cannot navigate to nested relation field in data browser ([#2420](https://github.com/ParsePlatform/parse-dashboard/issues/2420)) ([e7ace9e](https://github.com/ParsePlatform/parse-dashboard/commit/e7ace9efa068b92c5cf0e5ccdad169ac7d71e81a))
28+
29+
# [5.2.0-alpha.7](https://github.com/ParsePlatform/parse-dashboard/compare/5.2.0-alpha.6...5.2.0-alpha.7) (2023-05-27)
30+
31+
32+
### Bug Fixes
33+
34+
* File uploading status not updating in data browser ([#2422](https://github.com/ParsePlatform/parse-dashboard/issues/2422)) ([e761f97](https://github.com/ParsePlatform/parse-dashboard/commit/e761f9715a8366466c6620994ce698adbbfc48cd))
35+
36+
# [5.2.0-alpha.6](https://github.com/ParsePlatform/parse-dashboard/compare/5.2.0-alpha.5...5.2.0-alpha.6) (2023-05-27)
37+
38+
39+
### Bug Fixes
40+
41+
* Text input cursor jumps to first position when writing long text ([#2413](https://github.com/ParsePlatform/parse-dashboard/issues/2413)) ([422ffb2](https://github.com/ParsePlatform/parse-dashboard/commit/422ffb2897bb2664eb47b5aaad5094a8b39431bf))
42+
43+
# [5.2.0-alpha.5](https://github.com/ParsePlatform/parse-dashboard/compare/5.2.0-alpha.4...5.2.0-alpha.5) (2023-05-27)
44+
45+
46+
### Bug Fixes
47+
48+
* Back button in data browser disappears after page refresh ([#2421](https://github.com/ParsePlatform/parse-dashboard/issues/2421)) ([6c5f19f](https://github.com/ParsePlatform/parse-dashboard/commit/6c5f19f6ed2cda1f1f0dc59bdaed3ae49f264380))
49+
50+
# [5.2.0-alpha.4](https://github.com/ParsePlatform/parse-dashboard/compare/5.2.0-alpha.3...5.2.0-alpha.4) (2023-05-27)
51+
52+
53+
### Bug Fixes
54+
55+
* Incorrect date picker position in data browser filter dialog ([#2425](https://github.com/ParsePlatform/parse-dashboard/issues/2425)) ([b96b48f](https://github.com/ParsePlatform/parse-dashboard/commit/b96b48fdd5ce452783e0887c36231971a1822173))
56+
57+
# [5.2.0-alpha.3](https://github.com/ParsePlatform/parse-dashboard/compare/5.2.0-alpha.2...5.2.0-alpha.3) (2023-05-27)
58+
59+
60+
### Bug Fixes
61+
62+
* Empty table in data browser when navigating back using the "back” button ([#2423](https://github.com/ParsePlatform/parse-dashboard/issues/2423)) ([6f3dab6](https://github.com/ParsePlatform/parse-dashboard/commit/6f3dab60c257c76345235acfd3e43aafadeb84c8))
63+
64+
# [5.2.0-alpha.2](https://github.com/ParsePlatform/parse-dashboard/compare/5.2.0-alpha.1...5.2.0-alpha.2) (2023-05-27)
65+
66+
67+
### Features
68+
69+
* Add links to users and roles in ACL dialog and handle invalid entries ([#2436](https://github.com/ParsePlatform/parse-dashboard/issues/2436)) ([a20cb8e](https://github.com/ParsePlatform/parse-dashboard/commit/a20cb8e534d3fecd8d337463864b15048772a9a5))
70+
71+
# [5.2.0-alpha.1](https://github.com/ParsePlatform/parse-dashboard/compare/5.1.0...5.2.0-alpha.1) (2023-05-21)
72+
73+
74+
### Bug Fixes
75+
76+
* Uncaught error when editing Number field in Edit Row dialog ([#2401](https://github.com/ParsePlatform/parse-dashboard/issues/2401)) ([26bd6fa](https://github.com/ParsePlatform/parse-dashboard/commit/26bd6fa39be1076621856a9c86dcd1307f8f7fdd))
77+
78+
### Features
79+
80+
* Add visual configurator for Parse Dashboard settings ([#2406](https://github.com/ParsePlatform/parse-dashboard/issues/2406)) ([228d839](https://github.com/ParsePlatform/parse-dashboard/commit/228d83903fd8698da7b96a5b74699f3ff2d5dad4))
81+
* Data types and pointer classes are sorted alphabetically in dialog to add new column ([#2400](https://github.com/ParsePlatform/parse-dashboard/issues/2400)) ([d9d285b](https://github.com/ParsePlatform/parse-dashboard/commit/d9d285b7f90434d3bb138c2c765272498e3f09c3))
82+
* Sort Cloud Code Jobs alphabetically ([#2402](https://github.com/ParsePlatform/parse-dashboard/issues/2402)) ([77fc372](https://github.com/ParsePlatform/parse-dashboard/commit/77fc372bedb9fb4eca728c1bc076e823c5bc3a2c))
83+
184
# [5.1.0-alpha.13](https://github.com/ParsePlatform/parse-dashboard/compare/5.1.0-alpha.12...5.1.0-alpha.13) (2023-03-07)
285

386

package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "parse-dashboard",
3-
"version": "5.2.0-beta.1",
3+
"version": "5.2.0-alpha.11",
44
"repository": {
55
"type": "git",
66
"url": "https://github.com/ParsePlatform/parse-dashboard"

src/components/ACLEditor/ACLEditor.react.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import Parse from 'parse';
99
import PermissionsDialog from 'components/PermissionsDialog/PermissionsDialog.react';
1010
import React from 'react';
1111

12-
function validateEntry(text) {
12+
function validateEntry(text, returnInvalid = true) {
1313

14+
let type = 'unknown';
15+
let entry = text;
1416
let userQuery;
1517
let roleQuery;
1618

@@ -19,22 +21,26 @@ function validateEntry(text) {
1921
}
2022

2123
if (text.startsWith('user:')) {
24+
type = 'user';
2225
// no need to query roles
2326
roleQuery = {
2427
find: () => Promise.resolve([])
2528
};
2629

2730
let user = text.substring(5);
31+
entry = user;
2832
userQuery = new Parse.Query.or(
2933
new Parse.Query(Parse.User).equalTo('username', user),
3034
new Parse.Query(Parse.User).equalTo('objectId', user)
3135
);
3236
} else if (text.startsWith('role:')) {
37+
type = 'role';
3338
// no need to query users
3439
userQuery = {
3540
find: () => Promise.resolve([])
3641
};
3742
let role = text.substring(5);
43+
entry = role;
3844
roleQuery = new Parse.Query.or(
3945
new Parse.Query(Parse.Role).equalTo('name', role),
4046
new Parse.Query(Parse.Role).equalTo('objectId', role)
@@ -61,6 +67,9 @@ function validateEntry(text) {
6167
} else if (role.length > 0) {
6268
return { entry: role[0], type: 'role' };
6369
} else {
70+
if(returnInvalid) {
71+
return Promise.resolve({entry, type})
72+
}
6473
return Promise.reject();
6574
}
6675
});

src/components/BrowserCell/BrowserCell.react.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ export default class BrowserCell extends Component {
9292
this.copyableValue = this.props.value.id;
9393
}
9494
else if (this.props.type === 'Array') {
95-
if ( this.props.value[0] && typeof this.props.value[0] === 'object' && this.props.value[0].__type === 'Pointer' ) {
95+
if ( this.props.value[0] && typeof this.props.value[0] === 'object' && this.props.value[0].__type === 'Pointer' && typeof this.props.onPointerClick === 'function' ) {
9696
const array = [];
9797
this.props.value.map( (v, i) => {
9898
if ( typeof v !== 'object' || v.__type !== 'Pointer' ) {
@@ -177,6 +177,9 @@ export default class BrowserCell extends Component {
177177
componentDidUpdate(prevProps) {
178178
if ( this.props.value !== prevProps.value ) {
179179
this.renderCellContent();
180+
this.props.value._previousSave
181+
?.then(() => this.renderCellContent())
182+
?.catch(err => console.log(err))
180183
}
181184
if (this.props.current) {
182185
const node = this.cellRef.current;

src/components/BrowserFilter/BrowserFilter.react.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export default class BrowserFilter extends React.Component {
2424

2525
this.state = {
2626
open: false,
27+
editMode: true,
2728
filters: new List(),
2829
blacklistedFilters: Filters.BLACKLISTED_FILTERS.concat(props.blacklistedFilters)
2930
};
@@ -48,7 +49,8 @@ export default class BrowserFilter extends React.Component {
4849
}
4950
this.setState(prevState => ({
5051
open: !prevState.open,
51-
filters: filters
52+
filters: filters,
53+
editMode: this.props.filters.size === 0
5254
}));
5355
this.props.setCurrent(null);
5456
}
@@ -59,7 +61,8 @@ export default class BrowserFilter extends React.Component {
5961
this.setState(({ filters }) => ({
6062
filters: filters.push(
6163
new Map({ field: field, constraint: available[field][0] })
62-
)
64+
),
65+
editMode: true
6366
}));
6467
}
6568

@@ -116,7 +119,7 @@ export default class BrowserFilter extends React.Component {
116119
onChange={filters => this.setState({ filters: filters })}
117120
onSearch={this.apply.bind(this)}
118121
renderRow={props => (
119-
<FilterRow {...props} active={this.props.filters.size > 0} parentContentId={POPOVER_CONTENT_ID} />
122+
<FilterRow {...props} active={this.props.filters.size > 0} editMode={this.state.editMode} parentContentId={POPOVER_CONTENT_ID} />
120123
)}
121124
/>
122125
<div className={styles.footer}>

src/components/BrowserFilter/FilterRow.react.js

+30-26
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import DateTimeEntry from 'components/DateTimeEntry/DateTimeEntry.react';
1111
import Icon from 'components/Icon/Icon.react';
1212
import Parse from 'parse';
1313
import PropTypes from 'lib/PropTypes';
14-
import React from 'react';
14+
import React, { useCallback } from 'react';
1515
import styles from 'components/BrowserFilter/BrowserFilter.scss';
1616
import validateNumeric from 'lib/validateNumeric';
1717

@@ -20,13 +20,7 @@ for (let c in Constraints) {
2020
constraintLookup[Constraints[c].name] = c;
2121
}
2222

23-
let setFocus = (input) => {
24-
if (input !== null) {
25-
input.focus();
26-
}
27-
}
28-
29-
function compareValue(info, value, onChangeCompareTo, onKeyDown, active, parentContentId) {
23+
function compareValue(info, value, onChangeCompareTo, onKeyDown, active, parentContentId, setFocus) {
3024
switch (info.type) {
3125
case null:
3226
return null;
@@ -91,25 +85,35 @@ let FilterRow = ({
9185
onDeleteRow,
9286
active,
9387
parentContentId,
94-
}) => (
95-
<div className={styles.row}>
96-
<ChromeDropdown
97-
color={active ? 'blue' : 'purple'}
98-
value={currentField}
99-
options={fields}
100-
onChange={onChangeField} />
101-
<ChromeDropdown
102-
width={compareInfo.type ? '175' : '325'}
103-
color={active ? 'blue' : 'purple'}
104-
value={Constraints[currentConstraint].name}
105-
options={constraints.map((c) => Constraints[c].name)}
106-
onChange={(c) => onChangeConstraint(constraintLookup[c], compareTo)} />
107-
{compareValue(compareInfo, compareTo, onChangeCompareTo, onKeyDown, active, parentContentId)}
108-
<button type='button' className={styles.remove} onClick={onDeleteRow}><Icon name='minus-solid' width={14} height={14} fill='rgba(0,0,0,0.4)' /></button>
109-
</div>
110-
);
88+
editMode
89+
}) => {
90+
91+
let setFocus = useCallback((input) => {
92+
if (input !== null && editMode) {
93+
input.focus();
94+
}
95+
}, [])
96+
97+
return (
98+
<div className={styles.row}>
99+
<ChromeDropdown
100+
color={active ? 'blue' : 'purple'}
101+
value={currentField}
102+
options={fields}
103+
onChange={onChangeField} />
104+
<ChromeDropdown
105+
width={compareInfo.type ? '175' : '325'}
106+
color={active ? 'blue' : 'purple'}
107+
value={Constraints[currentConstraint].name}
108+
options={constraints.map((c) => Constraints[c].name)}
109+
onChange={(c) => onChangeConstraint(constraintLookup[c], compareTo)} />
110+
{compareValue(compareInfo, compareTo, onChangeCompareTo, onKeyDown, active, parentContentId, setFocus)}
111+
<button type='button' className={styles.remove} onClick={onDeleteRow}><Icon name='minus-solid' width={14} height={14} fill='rgba(0,0,0,0.4)' /></button>
112+
</div>
113+
);
114+
}
111115

112-
export default FilterRow;
116+
export default React.memo(FilterRow);
113117

114118
FilterRow.propTypes = {
115119
fields: PropTypes.arrayOf(PropTypes.string).isRequired,

0 commit comments

Comments
 (0)