@oneuptime/common 10.2.6 → 10.2.8

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.
@@ -30,24 +30,21 @@ export default class GlobalConfigAPI extends BaseAPI<
30
30
  `${new this.entityType().getCrudApiPath()?.toString()}/vars`,
31
31
  async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
32
32
  try {
33
- /*
34
- * const globalConfig: GlobalConfig | null =
35
- * await GlobalConfigService.findOneById({
36
- * id: ObjectID.getZeroObjectID(),
37
- * select: {
38
- * useHttps: true,
39
- * },
40
- * props: {
41
- * isRoot: true,
42
- * },
43
- * });
44
- */
33
+ const globalConfig: GlobalConfig | null =
34
+ await GlobalConfigService.findOneById({
35
+ id: ObjectID.getZeroObjectID(),
36
+ select: {
37
+ disableUserProjectCreation: true,
38
+ },
39
+ props: {
40
+ isRoot: true,
41
+ },
42
+ });
45
43
 
46
44
  return Response.sendJsonObjectResponse(req, res, {
47
- /*
48
- * USE_HTTPS:
49
- * globalConfig?.useHttps?.toString() || 'false',
50
- */
45
+ disableUserProjectCreation: Boolean(
46
+ globalConfig?.disableUserProjectCreation,
47
+ ),
51
48
  });
52
49
  } catch (err) {
53
50
  next(err);
@@ -18,6 +18,7 @@ export interface ComponentProps {
18
18
  selectedProjectName: string;
19
19
  onCreateProjectButtonClicked: () => void;
20
20
  onProjectSelected: (project: Project) => void;
21
+ hideCreateProjectButton?: boolean | undefined;
21
22
  }
22
23
 
23
24
  const ProjectPicker: FunctionComponent<ComponentProps> = (
@@ -101,12 +102,16 @@ const ProjectPicker: FunctionComponent<ComponentProps> = (
101
102
  <></>
102
103
  )}
103
104
  </>
104
- <CreateNewProjectButton
105
- onCreateButtonClicked={() => {
106
- setIsComponentVisible(false);
107
- props.onCreateProjectButtonClicked();
108
- }}
109
- />
105
+ {!props.hideCreateProjectButton ? (
106
+ <CreateNewProjectButton
107
+ onCreateButtonClicked={() => {
108
+ setIsComponentVisible(false);
109
+ props.onCreateProjectButtonClicked();
110
+ }}
111
+ />
112
+ ) : (
113
+ <></>
114
+ )}
110
115
  </ProjectPickerMenu>
111
116
  )}
112
117
  </div>
@@ -7,6 +7,7 @@ import React, {
7
7
  } from "react";
8
8
  import {
9
9
  DEFAULT_LOGS_TABLE_COLUMNS,
10
+ getLogsAttributeColumnId,
10
11
  LogsTableColumnOption,
11
12
  normalizeLogsTableColumns,
12
13
  } from "../types";
@@ -71,6 +72,23 @@ const ColumnSelector: FunctionComponent<ColumnSelectorProps> = (
71
72
  });
72
73
  }, [props.availableColumns, searchQuery, selectedColumnIds]);
73
74
 
75
+ const trimmedAttributeKey: string = searchQuery.trim();
76
+ const customAttributeColumnId: string = trimmedAttributeKey
77
+ ? getLogsAttributeColumnId(trimmedAttributeKey)
78
+ : "";
79
+ const isCustomAttributeAlreadySelected: boolean =
80
+ customAttributeColumnId !== "" &&
81
+ selectedColumnIds.includes(customAttributeColumnId);
82
+ const isCustomAttributeAlreadyAvailable: boolean = availableColumns.some(
83
+ (column: LogsTableColumnOption): boolean => {
84
+ return column.id === customAttributeColumnId;
85
+ },
86
+ );
87
+ const canAddCustomAttribute: boolean =
88
+ trimmedAttributeKey !== "" &&
89
+ !isCustomAttributeAlreadySelected &&
90
+ !isCustomAttributeAlreadyAvailable;
91
+
74
92
  const updateColumns: (columns: Array<string>) => void = (
75
93
  columns: Array<string>,
76
94
  ): void => {
@@ -225,15 +243,51 @@ const ColumnSelector: FunctionComponent<ColumnSelectorProps> = (
225
243
  onChange={(event: ChangeEvent<HTMLInputElement>) => {
226
244
  setSearchQuery(event.target.value);
227
245
  }}
228
- placeholder="Search columns"
229
- className="w-40 rounded-md border border-gray-200 px-2 py-1 text-xs text-gray-600 focus:border-indigo-300 focus:outline-none focus:ring-2 focus:ring-indigo-100"
246
+ onKeyDown={(
247
+ event: React.KeyboardEvent<HTMLInputElement>,
248
+ ): void => {
249
+ if (event.key === "Enter" && canAddCustomAttribute) {
250
+ event.preventDefault();
251
+ addColumn(customAttributeColumnId);
252
+ setSearchQuery("");
253
+ }
254
+ }}
255
+ placeholder="Search or type attribute"
256
+ className="w-48 rounded-md border border-gray-200 px-2 py-1 text-xs text-gray-600 focus:border-indigo-300 focus:outline-none focus:ring-2 focus:ring-indigo-100"
230
257
  />
231
258
  </div>
232
259
 
233
260
  <div className="max-h-72 space-y-2 overflow-y-auto pr-1">
234
- {availableColumns.length === 0 && (
261
+ {canAddCustomAttribute && (
262
+ <div className="flex items-center justify-between rounded-md border border-dashed border-indigo-200 bg-indigo-50/50 px-3 py-2">
263
+ <div className="min-w-0 flex-1">
264
+ <p className="truncate text-sm text-gray-700">
265
+ <span className="text-gray-500">Attribute: </span>
266
+ <span className="font-mono">{trimmedAttributeKey}</span>
267
+ </p>
268
+ <p className="text-[11px] text-gray-500">
269
+ Add as a column to show this attribute&apos;s value.
270
+ </p>
271
+ </div>
272
+
273
+ <button
274
+ type="button"
275
+ className="ml-3 rounded-md px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-100 hover:text-indigo-700"
276
+ onClick={() => {
277
+ addColumn(customAttributeColumnId);
278
+ setSearchQuery("");
279
+ }}
280
+ >
281
+ Add attribute
282
+ </button>
283
+ </div>
284
+ )}
285
+
286
+ {availableColumns.length === 0 && !canAddCustomAttribute && (
235
287
  <div className="rounded-md border border-dashed border-gray-200 px-3 py-4 text-sm text-gray-500">
236
- No matching columns available.
288
+ {trimmedAttributeKey
289
+ ? "No matching columns available."
290
+ : "Type an attribute name above to add it as a column."}
237
291
  </div>
238
292
  )}
239
293
 
@@ -1412,10 +1412,6 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
1412
1412
  });
1413
1413
  }
1414
1414
 
1415
- if (props.saveFilterProps) {
1416
- headerbuttons.push(getSaveFilterDropdown());
1417
- }
1418
-
1419
1415
  setCardButtons(headerbuttons);
1420
1416
  };
1421
1417
 
@@ -1861,6 +1857,21 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
1861
1857
  };
1862
1858
  };
1863
1859
 
1860
+ /*
1861
+ * When the load is driven by the search box, suppress the table-level
1862
+ * loading state so existing rows stay visible and the only spinner is
1863
+ * the one in the search bar. Sort / pagination / refresh loads still
1864
+ * show the table loader because there is no other indicator for those.
1865
+ */
1866
+ type ShouldSuppressTableLoadingFunction = () => boolean;
1867
+ const isSearchActive: ShouldSuppressTableLoadingFunction = (): boolean => {
1868
+ return debouncedSearchText.trim().length > 0 || selectedLabels.length > 0;
1869
+ };
1870
+
1871
+ const getTableLoadingState: () => boolean = (): boolean => {
1872
+ return isSearchActive() ? false : isLoading;
1873
+ };
1874
+
1864
1875
  const getTable: GetReactElementFunction = (): ReactElement => {
1865
1876
  return (
1866
1877
  <Table
@@ -1997,7 +2008,7 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
1997
2008
  pluralLabel={props.pluralName || model.pluralName || "Items"}
1998
2009
  error={error}
1999
2010
  currentPageNumber={currentPageNumber}
2000
- isLoading={isLoading}
2011
+ isLoading={getTableLoadingState()}
2001
2012
  enableDragAndDrop={props.enableDragAndDrop}
2002
2013
  dragDropIdField={"_id"}
2003
2014
  dragDropIndexField={props.dragDropIndexField}
@@ -2156,7 +2167,7 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
2156
2167
  }}
2157
2168
  dragDropIdField={"_id"}
2158
2169
  dragDropIndexField={props.dragDropIndexField}
2159
- isLoading={isLoading}
2170
+ isLoading={getTableLoadingState()}
2160
2171
  totalItemsCount={totalItemsCount}
2161
2172
  data={data}
2162
2173
  id={props.id}
@@ -2337,10 +2348,18 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
2337
2348
  const trimmedSearch: string = stripTrailingMentionForUi(searchText).trim();
2338
2349
  const trimmedActive: string =
2339
2350
  stripTrailingMentionForUi(debouncedSearchText).trim();
2340
- const isSearching: boolean =
2341
- trimmedSearch.length > 0 && trimmedSearch !== trimmedActive;
2342
2351
  const hasActiveSearch: boolean = trimmedActive.length > 0;
2343
2352
  const hasSelectedLabels: boolean = selectedLabels.length > 0;
2353
+ /*
2354
+ * "isSearching" covers both phases — typing-in-flight (before the
2355
+ * debounce fires) AND the actual API request that follows. The table
2356
+ * loader is suppressed during the latter, so this spinner is the only
2357
+ * loading indicator the user sees during a search-driven fetch.
2358
+ */
2359
+ const isTypingInFlight: boolean =
2360
+ trimmedSearch.length > 0 && trimmedSearch !== trimmedActive;
2361
+ const isSearching: boolean =
2362
+ isTypingInFlight || (isLoading && (hasActiveSearch || hasSelectedLabels));
2344
2363
  const showMatchPill: boolean =
2345
2364
  !isSearching && (hasActiveSearch || hasSelectedLabels);
2346
2365
 
@@ -2391,7 +2410,7 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
2391
2410
  {/* Expanded input + dropdown — sized to the full title slot */}
2392
2411
  <div className="relative flex w-full flex-col gap-1">
2393
2412
  <div
2394
- className={`flex w-full items-center gap-2 rounded-lg border bg-white pl-3 pr-2 py-1.5 transition-all duration-200 ${borderClass}`}
2413
+ className={`flex w-full items-center gap-2 rounded-md border bg-white px-3 py-2 transition-all duration-200 ${borderClass}`}
2395
2414
  onClick={() => {
2396
2415
  searchInputRef.current?.focus();
2397
2416
  }}
@@ -2520,7 +2539,7 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
2520
2539
  spellCheck={false}
2521
2540
  autoComplete="off"
2522
2541
  tabIndex={expanded ? 0 : -1}
2523
- className="min-w-[6rem] flex-1 bg-transparent py-1 text-sm text-gray-900 placeholder-gray-400 outline-none"
2542
+ className="min-w-[6rem] flex-1 bg-transparent text-sm leading-5 text-gray-900 placeholder-gray-400 outline-none"
2524
2543
  />
2525
2544
  </div>
2526
2545
  {isSearching && (
@@ -2796,15 +2815,15 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
2796
2815
  };
2797
2816
 
2798
2817
  /*
2799
- * Builds the right-hand side of the card header. All three slots — search
2800
- * trigger/bar, main button, more menu — stay mounted at all times. State
2801
- * transitions are purely CSS so the inputs keep their focus, the dropdown
2802
- * keeps its open state, and there's no mount/unmount flicker.
2818
+ * Builds the right-hand side of the card header. All slots — search
2819
+ * trigger/bar, saved views, main button, more menu — stay mounted at all
2820
+ * times. State transitions are purely CSS so the inputs keep their focus,
2821
+ * the dropdown keeps its open state, and there's no mount/unmount flicker.
2803
2822
  *
2804
- * Layout when collapsed: [🔍 trigger] [main] [⋯]
2823
+ * Layout when collapsed: [🔍 trigger] [Saved Views] [main] [⋯]
2805
2824
  * Layout when expanded: [🔍 ━━━ wide search bar ━━━]
2806
- * The main button + more menu fade and collapse-to-zero-width when the
2807
- * search expands, freeing horizontal space for the bar.
2825
+ * Saved views + main button + more menu fade and collapse-to-zero-width
2826
+ * when the search expands, freeing horizontal space for the bar.
2808
2827
  */
2809
2828
  const getHeaderButtonsWithSearch: GetHeaderButtonsFunction = (): Array<
2810
2829
  CardButtonSchema | ReactElement
@@ -2813,15 +2832,27 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
2813
2832
  props.searchableFields && props.searchableFields.length > 0,
2814
2833
  );
2815
2834
 
2835
+ /*
2836
+ * Saved views get their own first-class slot in the header — never
2837
+ * collapsed into the overflow ⋯ menu. Render fresh on every call so the
2838
+ * inner TableViewElement always sees the current query / sort / itemsOnPage.
2839
+ */
2840
+ const savedViewsElement: ReactElement | null = props.saveFilterProps
2841
+ ? getSaveFilterDropdown()
2842
+ : null;
2843
+
2816
2844
  if (cardButtons.length === 0 && !hasSearch) {
2817
- return cardButtons;
2845
+ return savedViewsElement ? [savedViewsElement] : cardButtons;
2818
2846
  }
2819
2847
 
2820
2848
  if (!hasSearch) {
2821
- // Without search, just split into [main] [⋯]; no special wrapping.
2849
+ // Without search, just split into [Saved Views] [main] [⋯]; no special wrapping.
2822
2850
  const { main, rest }: FindMainButtonResult =
2823
2851
  splitButtonsForHeader(cardButtons);
2824
2852
  const composed: Array<ReactElement> = [];
2853
+ if (savedViewsElement) {
2854
+ composed.push(savedViewsElement);
2855
+ }
2825
2856
  if (main) {
2826
2857
  composed.push(renderMainButton(main));
2827
2858
  }
@@ -2841,10 +2872,7 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
2841
2872
  const moreMenu: ReactElement | null = renderMoreMenu(rest);
2842
2873
 
2843
2874
  const wrapped: ReactElement = (
2844
- <div
2845
- key="model-table-header-actions"
2846
- className="flex items-center gap-1.5"
2847
- >
2875
+ <div key="model-table-header-actions" className="flex items-center gap-3">
2848
2876
  {/*
2849
2877
  * Search slot — a compact pill showing "Search … /" by default,
2850
2878
  * grown into the full search bar when expanded. Always advertising
@@ -2868,7 +2896,7 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
2868
2896
  title="Search (/)"
2869
2897
  aria-label="Open search"
2870
2898
  tabIndex={isExpanded ? -1 : 0}
2871
- className={`absolute inset-0 inline-flex items-center gap-2 rounded-lg border bg-white pl-3 pr-2 text-sm shadow-sm transition-all duration-200 ease-out ${
2899
+ className={`absolute inset-0 inline-flex items-center gap-2 rounded-md border bg-white px-3 text-sm shadow-sm transition-all duration-200 ease-out ${
2872
2900
  isExpanded
2873
2901
  ? "pointer-events-none border-gray-200 opacity-0"
2874
2902
  : "border-gray-200 opacity-100 hover:border-gray-300 hover:bg-gray-50"
@@ -2909,13 +2937,14 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
2909
2937
  * search slot to the left can grow into the freed space.
2910
2938
  */}
2911
2939
  <div
2912
- className={`flex items-center transition-all duration-300 ease-out ${
2940
+ className={`flex items-center transition-all duration-300 ease-out [&_button]:md:ml-0 ${
2913
2941
  isExpanded
2914
- ? "max-w-0 -ml-1.5 gap-0 opacity-0 pointer-events-none"
2915
- : "max-w-[600px] gap-1.5 opacity-100"
2942
+ ? "max-w-0 -ml-3 gap-0 opacity-0 pointer-events-none"
2943
+ : "max-w-[600px] gap-3 opacity-100"
2916
2944
  }`}
2917
2945
  aria-hidden={isExpanded}
2918
2946
  >
2947
+ {savedViewsElement}
2919
2948
  {main && renderMainButton(main)}
2920
2949
  {moreMenu}
2921
2950
  </div>
@@ -342,39 +342,77 @@ const TableViewElement: <T extends DatabaseBaseModel | AnalyticsBaseModel>(
342
342
  );
343
343
  }
344
344
 
345
- type GetElementToBeShownInsteadOfButtonFunction = () =>
346
- | ReactElement
347
- | undefined;
345
+ type GetElementToBeShownInsteadOfButtonFunction = () => ReactElement;
348
346
 
349
347
  const getElementToBeShownInsteadOfButton: GetElementToBeShownInsteadOfButtonFunction =
350
- (): ReactElement | undefined => {
351
- if (!currentlySelectedView) {
352
- return undefined;
353
- }
354
-
355
- return (
356
- <div className="ml-2 mt-1 cursor-pointer font-semibold flex rounded-full border-2 border-gray-600 text-gray-600 text-xs p-1 pl-2 pr-2">
348
+ (): ReactElement => {
349
+ /*
350
+ * Shared shape so the trigger lines up with the search bar + Create button
351
+ * (text-sm font-medium + px-3 py-2 + 1px border → ~38px tall).
352
+ */
353
+ const triggerBase: string =
354
+ "inline-flex cursor-pointer items-center gap-2 rounded-md border px-3 py-2 text-sm font-medium shadow-sm transition-colors";
355
+
356
+ if (currentlySelectedView) {
357
+ return (
357
358
  <div
358
- onClick={() => {
359
- flipDropdown();
360
- }}
361
- >
362
- {currentlySelectedView.name}
363
- </div>
364
- <div
365
- className="h-4 w-4 rounded-full bg-gray-500 text-white hover:bg-gray-800 ml-3 -mr-1 p-1"
366
- onClick={() => {
367
- setCurrentlySelectedView(null);
368
- props.onViewChange?.(null);
369
- closeDropdownMenu();
370
- }}
359
+ className={`${triggerBase} border-indigo-300 bg-indigo-50 text-indigo-700 hover:border-indigo-400 hover:bg-indigo-100`}
360
+ title={`Saved view: ${currentlySelectedView.name}`}
371
361
  >
372
362
  <Icon
373
- icon={IconProp.Close}
374
- size={SizeProp.Regular}
375
- thick={ThickProp.Thick}
363
+ icon={IconProp.Window}
364
+ className="h-4 w-4 flex-none text-indigo-500"
376
365
  />
366
+ <span className="max-w-[12rem] truncate">
367
+ {currentlySelectedView.name}
368
+ </span>
369
+ <div
370
+ role="button"
371
+ tabIndex={0}
372
+ aria-label="Clear saved view"
373
+ title="Clear saved view"
374
+ className="-mr-1 ml-1 inline-flex h-5 w-5 flex-none items-center justify-center rounded-full bg-indigo-100 text-indigo-600 ring-1 ring-inset ring-indigo-300 hover:bg-indigo-200 hover:text-indigo-900 hover:ring-indigo-400 focus:outline-none focus:ring-2 focus:ring-indigo-500"
375
+ onClick={(event: React.MouseEvent<HTMLDivElement>) => {
376
+ event.stopPropagation();
377
+ setCurrentlySelectedView(null);
378
+ props.onViewChange?.(null);
379
+ closeDropdownMenu();
380
+ }}
381
+ onKeyDown={(event: React.KeyboardEvent<HTMLDivElement>) => {
382
+ if (event.key === "Enter" || event.key === " ") {
383
+ event.preventDefault();
384
+ event.stopPropagation();
385
+ setCurrentlySelectedView(null);
386
+ props.onViewChange?.(null);
387
+ closeDropdownMenu();
388
+ }
389
+ }}
390
+ >
391
+ <Icon
392
+ icon={IconProp.Close}
393
+ size={SizeProp.Small}
394
+ thick={ThickProp.Thick}
395
+ />
396
+ </div>
377
397
  </div>
398
+ );
399
+ }
400
+
401
+ return (
402
+ <div
403
+ className={`${triggerBase} border-gray-300 bg-white text-gray-700 hover:bg-gray-50`}
404
+ title="Saved Views"
405
+ >
406
+ <Icon
407
+ icon={IconProp.Window}
408
+ className="h-4 w-4 flex-none text-gray-500"
409
+ />
410
+ <span>Saved Views</span>
411
+ {allTableViews.length > 0 && (
412
+ <span className="text-gray-400">
413
+ {allTableViews.length.toLocaleString()}
414
+ </span>
415
+ )}
378
416
  </div>
379
417
  );
380
418
  };
@@ -385,12 +423,6 @@ const TableViewElement: <T extends DatabaseBaseModel | AnalyticsBaseModel>(
385
423
  }
386
424
  };
387
425
 
388
- const flipDropdown: VoidFunction = (): void => {
389
- if (moreMenuRef.current) {
390
- (moreMenuRef.current as any).flipDropdown();
391
- }
392
- };
393
-
394
426
  return (
395
427
  <MoreMenu
396
428
  elementToBeShownInsteadOfButton={getElementToBeShownInsteadOfButton()}
@@ -0,0 +1,55 @@
1
+ import URL from "../../Types/API/URL";
2
+ import HTTPErrorResponse from "../../Types/API/HTTPErrorResponse";
3
+ import HTTPResponse from "../../Types/API/HTTPResponse";
4
+ import { JSONObject } from "../../Types/JSON";
5
+ import API from "../../Utils/API";
6
+ import { APP_API_URL } from "../Config";
7
+
8
+ export interface GlobalConfigVars {
9
+ disableUserProjectCreation: boolean;
10
+ }
11
+
12
+ export default class GlobalConfigUtil {
13
+ private static cache: GlobalConfigVars | null = null;
14
+ private static fetchPromise: Promise<GlobalConfigVars> | null = null;
15
+
16
+ public static async fetchVars(): Promise<GlobalConfigVars> {
17
+ if (GlobalConfigUtil.cache) {
18
+ return GlobalConfigUtil.cache;
19
+ }
20
+
21
+ if (GlobalConfigUtil.fetchPromise) {
22
+ return GlobalConfigUtil.fetchPromise;
23
+ }
24
+
25
+ GlobalConfigUtil.fetchPromise = (async (): Promise<GlobalConfigVars> => {
26
+ const apiUrl: URL = URL.fromURL(APP_API_URL).addRoute(
27
+ "/global-config/vars",
28
+ );
29
+
30
+ const response: HTTPResponse<JSONObject> | HTTPErrorResponse =
31
+ await API.get<JSONObject>({ url: apiUrl });
32
+
33
+ const data: JSONObject =
34
+ response instanceof HTTPErrorResponse
35
+ ? {}
36
+ : (response.data as JSONObject);
37
+
38
+ GlobalConfigUtil.cache = {
39
+ disableUserProjectCreation: Boolean(data["disableUserProjectCreation"]),
40
+ };
41
+
42
+ return GlobalConfigUtil.cache;
43
+ })();
44
+
45
+ try {
46
+ return await GlobalConfigUtil.fetchPromise;
47
+ } finally {
48
+ GlobalConfigUtil.fetchPromise = null;
49
+ }
50
+ }
51
+
52
+ public static clearCache(): void {
53
+ GlobalConfigUtil.cache = null;
54
+ }
55
+ }
@@ -14,23 +14,17 @@ export default class GlobalConfigAPI extends BaseAPI {
14
14
  super(GlobalConfig, GlobalConfigService);
15
15
  this.router.get(`${(_a = new this.entityType().getCrudApiPath()) === null || _a === void 0 ? void 0 : _a.toString()}/vars`, async (req, res, next) => {
16
16
  try {
17
- /*
18
- * const globalConfig: GlobalConfig | null =
19
- * await GlobalConfigService.findOneById({
20
- * id: ObjectID.getZeroObjectID(),
21
- * select: {
22
- * useHttps: true,
23
- * },
24
- * props: {
25
- * isRoot: true,
26
- * },
27
- * });
28
- */
17
+ const globalConfig = await GlobalConfigService.findOneById({
18
+ id: ObjectID.getZeroObjectID(),
19
+ select: {
20
+ disableUserProjectCreation: true,
21
+ },
22
+ props: {
23
+ isRoot: true,
24
+ },
25
+ });
29
26
  return Response.sendJsonObjectResponse(req, res, {
30
- /*
31
- * USE_HTTPS:
32
- * globalConfig?.useHttps?.toString() || 'false',
33
- */
27
+ disableUserProjectCreation: Boolean(globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.disableUserProjectCreation),
34
28
  });
35
29
  }
36
30
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalConfigAPI.js","sourceRoot":"","sources":["../../../../Server/API/GlobalConfigAPI.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GlobalConfigAPI.js","sourceRoot":"","sources":["../../../../Server/API/GlobalConfigAPI.ts"],"names":[],"mappings":"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"}
@@ -40,10 +40,10 @@ const ProjectPicker = (props) => {
40
40
  props.onProjectSelected(project);
41
41
  }, icon: IconProp.Folder }));
42
42
  })) : (React.createElement(React.Fragment, null))),
43
- React.createElement(CreateNewProjectButton, { onCreateButtonClicked: () => {
43
+ !props.hideCreateProjectButton ? (React.createElement(CreateNewProjectButton, { onCreateButtonClicked: () => {
44
44
  setIsComponentVisible(false);
45
45
  props.onCreateProjectButtonClicked();
46
- } })))))));
46
+ } })) : (React.createElement(React.Fragment, null))))))));
47
47
  };
48
48
  export default ProjectPicker;
49
49
  //# sourceMappingURL=ProjectPicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectPicker.js","sourceRoot":"","sources":["../../../../../../UI/Components/Header/ProjectPicker/ProjectPicker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProjectPicker.js","sourceRoot":"","sources":["../../../../../../UI/Components/Header/ProjectPicker/ProjectPicker.tsx"],"names":[],"mappings":"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"}