openvsx-webui-test 0.18.0-dev.0 → 0.18.0-dev.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 (92) hide show
  1. package/lib/extension-registry-service.d.ts +22 -1
  2. package/lib/extension-registry-service.d.ts.map +1 -1
  3. package/lib/extension-registry-service.js +151 -1
  4. package/lib/extension-registry-service.js.map +1 -1
  5. package/lib/extension-registry-types.d.ts +41 -0
  6. package/lib/extension-registry-types.d.ts.map +1 -1
  7. package/lib/extension-registry-types.js +16 -0
  8. package/lib/extension-registry-types.js.map +1 -1
  9. package/lib/pages/admin-dashboard/admin-dashboard.d.ts +3 -0
  10. package/lib/pages/admin-dashboard/admin-dashboard.d.ts.map +1 -1
  11. package/lib/pages/admin-dashboard/admin-dashboard.js +33 -3
  12. package/lib/pages/admin-dashboard/admin-dashboard.js.map +1 -1
  13. package/lib/pages/admin-dashboard/components/data-grid-filter-operators.d.ts +28 -0
  14. package/lib/pages/admin-dashboard/components/data-grid-filter-operators.d.ts.map +1 -0
  15. package/lib/pages/admin-dashboard/components/data-grid-filter-operators.js +93 -0
  16. package/lib/pages/admin-dashboard/components/data-grid-filter-operators.js.map +1 -0
  17. package/lib/pages/admin-dashboard/components/index.d.ts +2 -0
  18. package/lib/pages/admin-dashboard/components/index.d.ts.map +1 -0
  19. package/lib/pages/admin-dashboard/components/index.js +14 -0
  20. package/lib/pages/admin-dashboard/components/index.js.map +1 -0
  21. package/lib/pages/admin-dashboard/customers/customer-form-dialog.d.ts +23 -0
  22. package/lib/pages/admin-dashboard/customers/customer-form-dialog.d.ts.map +1 -0
  23. package/lib/pages/admin-dashboard/customers/customer-form-dialog.js +225 -0
  24. package/lib/pages/admin-dashboard/customers/customer-form-dialog.js.map +1 -0
  25. package/lib/pages/admin-dashboard/customers/customers.d.ts +15 -0
  26. package/lib/pages/admin-dashboard/customers/customers.d.ts.map +1 -0
  27. package/lib/pages/admin-dashboard/customers/customers.js +175 -0
  28. package/lib/pages/admin-dashboard/customers/customers.js.map +1 -0
  29. package/lib/pages/admin-dashboard/customers/delete-customer-dialog.d.ts +23 -0
  30. package/lib/pages/admin-dashboard/customers/delete-customer-dialog.d.ts.map +1 -0
  31. package/lib/pages/admin-dashboard/customers/delete-customer-dialog.js +64 -0
  32. package/lib/pages/admin-dashboard/customers/delete-customer-dialog.js.map +1 -0
  33. package/lib/pages/admin-dashboard/publisher-admin.js +4 -4
  34. package/lib/pages/admin-dashboard/publisher-admin.js.map +1 -1
  35. package/lib/pages/admin-dashboard/tiers/delete-tier-dialog.d.ts +23 -0
  36. package/lib/pages/admin-dashboard/tiers/delete-tier-dialog.d.ts.map +1 -0
  37. package/lib/pages/admin-dashboard/tiers/delete-tier-dialog.js +55 -0
  38. package/lib/pages/admin-dashboard/tiers/delete-tier-dialog.js.map +1 -0
  39. package/lib/pages/admin-dashboard/tiers/tier-form-dialog.d.ts +23 -0
  40. package/lib/pages/admin-dashboard/tiers/tier-form-dialog.d.ts.map +1 -0
  41. package/lib/pages/admin-dashboard/tiers/tier-form-dialog.js +215 -0
  42. package/lib/pages/admin-dashboard/tiers/tier-form-dialog.js.map +1 -0
  43. package/lib/pages/admin-dashboard/tiers/tiers.d.ts +15 -0
  44. package/lib/pages/admin-dashboard/tiers/tiers.d.ts.map +1 -0
  45. package/lib/pages/admin-dashboard/tiers/tiers.js +174 -0
  46. package/lib/pages/admin-dashboard/tiers/tiers.js.map +1 -0
  47. package/lib/pages/admin-dashboard/usage-stats/usage-stats-chart.d.ts +23 -0
  48. package/lib/pages/admin-dashboard/usage-stats/usage-stats-chart.d.ts.map +1 -0
  49. package/lib/pages/admin-dashboard/usage-stats/usage-stats-chart.js +106 -0
  50. package/lib/pages/admin-dashboard/usage-stats/usage-stats-chart.js.map +1 -0
  51. package/lib/pages/admin-dashboard/usage-stats/usage-stats-search.d.ts +26 -0
  52. package/lib/pages/admin-dashboard/usage-stats/usage-stats-search.d.ts.map +1 -0
  53. package/lib/pages/admin-dashboard/usage-stats/usage-stats-search.js +50 -0
  54. package/lib/pages/admin-dashboard/usage-stats/usage-stats-search.js.map +1 -0
  55. package/lib/pages/admin-dashboard/usage-stats/usage-stats-utils.d.ts +14 -0
  56. package/lib/pages/admin-dashboard/usage-stats/usage-stats-utils.d.ts.map +1 -0
  57. package/lib/pages/admin-dashboard/usage-stats/usage-stats-utils.js +16 -0
  58. package/lib/pages/admin-dashboard/usage-stats/usage-stats-utils.js.map +1 -0
  59. package/lib/pages/admin-dashboard/usage-stats/usage-stats.d.ts +15 -0
  60. package/lib/pages/admin-dashboard/usage-stats/usage-stats.d.ts.map +1 -0
  61. package/lib/pages/admin-dashboard/usage-stats/usage-stats.js +103 -0
  62. package/lib/pages/admin-dashboard/usage-stats/usage-stats.js.map +1 -0
  63. package/lib/pages/admin-dashboard/welcome.d.ts.map +1 -1
  64. package/lib/pages/admin-dashboard/welcome.js +4 -1
  65. package/lib/pages/admin-dashboard/welcome.js.map +1 -1
  66. package/lib/pages/extension-detail/extension-detail-reviews.d.ts.map +1 -1
  67. package/lib/pages/extension-detail/extension-detail-reviews.js +30 -18
  68. package/lib/pages/extension-detail/extension-detail-reviews.js.map +1 -1
  69. package/lib/server-request.d.ts +1 -1
  70. package/lib/server-request.d.ts.map +1 -1
  71. package/lib/server-request.js +3 -3
  72. package/lib/server-request.js.map +1 -1
  73. package/package.json +8 -1
  74. package/src/extension-registry-service.ts +157 -1
  75. package/src/extension-registry-types.ts +50 -0
  76. package/src/pages/admin-dashboard/admin-dashboard.tsx +45 -2
  77. package/src/pages/admin-dashboard/components/data-grid-filter-operators.tsx +126 -0
  78. package/src/pages/admin-dashboard/components/index.ts +18 -0
  79. package/src/pages/admin-dashboard/customers/customer-form-dialog.tsx +348 -0
  80. package/src/pages/admin-dashboard/customers/customers.tsx +279 -0
  81. package/src/pages/admin-dashboard/customers/delete-customer-dialog.tsx +94 -0
  82. package/src/pages/admin-dashboard/publisher-admin.tsx +4 -4
  83. package/src/pages/admin-dashboard/tiers/delete-tier-dialog.tsx +83 -0
  84. package/src/pages/admin-dashboard/tiers/tier-form-dialog.tsx +372 -0
  85. package/src/pages/admin-dashboard/tiers/tiers.tsx +254 -0
  86. package/src/pages/admin-dashboard/usage-stats/usage-stats-chart.tsx +189 -0
  87. package/src/pages/admin-dashboard/usage-stats/usage-stats-search.tsx +83 -0
  88. package/src/pages/admin-dashboard/usage-stats/usage-stats-utils.ts +16 -0
  89. package/src/pages/admin-dashboard/usage-stats/usage-stats.tsx +127 -0
  90. package/src/pages/admin-dashboard/welcome.tsx +3 -0
  91. package/src/pages/extension-detail/extension-detail-reviews.tsx +49 -38
  92. package/src/server-request.ts +3 -3
@@ -35,6 +35,7 @@ export const ExtensionDetailReviews: FunctionComponent<ExtensionDetailReviewsPro
35
35
  const [loading, setLoading] = useState<boolean>(true);
36
36
  const [revoked, setRevoked] = useState<boolean>(false);
37
37
  const [removeDialogOpen, setRemoveDialogOpen] = useState(false);
38
+ const [removeCommentFromUser, setRemoveCommentFromUser] = useState<UserData | undefined>(undefined);
38
39
  const [removeReviewSet, setRemoveReviewSet] = useState(new Set<string>());
39
40
  const context = useContext(MainContext);
40
41
  const abortController = useRef<AbortController>(new AbortController());
@@ -111,56 +112,65 @@ export const ExtensionDetailReviews: FunctionComponent<ExtensionDetailReviewsPro
111
112
  }
112
113
  };
113
114
 
114
- const handleAdminRemoveReviewButton = async (r: ExtensionReview) => {
115
- addRemoveReviewRequest(r.user.loginName);
115
+ const handleAdminRemoveReviewButton = async () => {
116
+ if (removeCommentFromUser === undefined) {
117
+ return;
118
+ }
119
+ addRemoveReviewRequest(removeCommentFromUser.loginName);
116
120
  try {
117
- const result = await context.service.deleteUserReview(abortController.current, props.extension, r.user);
121
+ const result = await context.service.deleteUserReview(abortController.current, props.extension, removeCommentFromUser);
118
122
  if (isError(result)) {
119
123
  throw result;
120
124
  }
121
125
  saveCompleted();
126
+ setRemoveDialogOpen(false);
122
127
  } catch (err) {
123
128
  context.handleError(err);
124
129
  } finally {
125
- deleteRemoveReviewRequest(r.user.loginName);
130
+ deleteRemoveReviewRequest(removeCommentFromUser.loginName);
126
131
  }
127
132
  };
128
133
 
129
134
  const renderAdminRemoveButton = (r: ExtensionReview): ReactNode => {
130
- return <>
131
- <Button
132
- variant='contained'
133
- color='error'
134
- onClick={() => setRemoveDialogOpen(true)} >
135
- Remove review
136
- </Button>
137
- <Dialog
138
- open={removeDialogOpen}
139
- onClose={() => setRemoveDialogOpen(false)}>
140
- <DialogTitle>Remove Review</DialogTitle>
141
- <DialogContent>
142
- <DialogContentText component='div'>
143
- <Typography>Confirm removal of review comment from <code>{r.user.loginName}</code>?</Typography>
144
- </DialogContentText>
145
- </DialogContent>
146
- <DialogActions>
147
- <Button
148
- variant='contained'
149
- color='primary'
150
- onClick={() => setRemoveDialogOpen(false)} >
151
- Cancel
152
- </Button>
153
- <ButtonWithProgress
154
- autoFocus
155
- color='error'
156
- sx={{ ml: 1 }}
157
- working={removeReviewSet.has(r.user.loginName)}
158
- onClick={() => handleAdminRemoveReviewButton(r)} >
159
- Remove review
160
- </ButtonWithProgress>
161
- </DialogActions>
162
- </Dialog>
163
- </>;
135
+ return <Button
136
+ variant='contained'
137
+ color='error'
138
+ sx={{ ml: 1 }}
139
+ onClick={() => {
140
+ setRemoveCommentFromUser(r.user);
141
+ setRemoveDialogOpen(true);
142
+ }}>
143
+ Remove review
144
+ </Button>;
145
+ };
146
+
147
+ const renderAdminRemoveDialog = () => {
148
+ return <Dialog
149
+ open={removeDialogOpen}
150
+ onClose={() => setRemoveDialogOpen(false)}>
151
+ <DialogTitle>Remove Review</DialogTitle>
152
+ <DialogContent>
153
+ <DialogContentText component='div'>
154
+ <Typography>Confirm removal of review comment from <code>{removeCommentFromUser?.loginName}</code>?</Typography>
155
+ </DialogContentText>
156
+ </DialogContent>
157
+ <DialogActions>
158
+ <Button
159
+ variant='contained'
160
+ color='primary'
161
+ onClick={() => setRemoveDialogOpen(false)} >
162
+ Cancel
163
+ </Button>
164
+ <ButtonWithProgress
165
+ autoFocus
166
+ color='error'
167
+ sx={{ ml: 1 }}
168
+ working={removeReviewSet.has(removeCommentFromUser?.loginName ?? '')}
169
+ onClick={() => handleAdminRemoveReviewButton()} >
170
+ Remove review
171
+ </ButtonWithProgress>
172
+ </DialogActions>
173
+ </Dialog>;
164
174
  };
165
175
 
166
176
  const renderReviewList = (list?: ExtensionReviewList): ReactNode => {
@@ -251,6 +261,7 @@ export const ExtensionDetailReviews: FunctionComponent<ExtensionDetailReviewsPro
251
261
  <Box>
252
262
  <DelayedLoadIndicator loading={loading}/>
253
263
  {renderReviewList(reviewList)}
264
+ {context.user?.role === 'admin' && renderAdminRemoveDialog()}
254
265
  </Box>
255
266
  </>;
256
267
 
@@ -28,7 +28,7 @@ export interface ErrorResponse {
28
28
  trace?: string;
29
29
  }
30
30
 
31
- export async function sendRequest<Res>(req: ServerAPIRequest): Promise<Res> {
31
+ export async function sendRequest<Res>(req: ServerAPIRequest, retry: boolean = true): Promise<Res> {
32
32
  req.method ??= 'GET';
33
33
  req.headers ??= {};
34
34
  if (!req.headers['Accept']) {
@@ -50,7 +50,7 @@ export async function sendRequest<Res>(req: ServerAPIRequest): Promise<Res> {
50
50
  param.credentials = 'include';
51
51
  }
52
52
 
53
- const options: any = {
53
+ const options: any = retry ? {
54
54
  retries: 10,
55
55
  retryDelay: (attempt: number, error: Error, response: Response) => {
56
56
  return Math.pow(2, attempt) * 1000;
@@ -58,7 +58,7 @@ export async function sendRequest<Res>(req: ServerAPIRequest): Promise<Res> {
58
58
  retryOn: (attempt: number, error: Error, response: Response) => {
59
59
  return error !== null || response.status >= 500;
60
60
  }
61
- };
61
+ } : {};
62
62
 
63
63
  const response = await fetchBuilder(fetch, options)(req.endpoint, param);
64
64
  if (response.ok) {