- {state.filters.map((_, index) => (
-
+ {state.filters.map((filter, index) => (
+
))}
{state.filters.length == 0 && (
diff --git a/studio/components/grid/components/header/filter/FilterRow.tsx b/studio/components/grid/components/header/filter/FilterRow.tsx
index bd84fde4366..ad733640278 100644
--- a/studio/components/grid/components/header/filter/FilterRow.tsx
+++ b/studio/components/grid/components/header/filter/FilterRow.tsx
@@ -1,75 +1,71 @@
-import * as React from 'react';
-import { Button, Input, IconChevronDown, IconX } from '@supabase/ui';
-import { DropdownControl } from '../../common';
-import { useDispatch, useTrackedState } from '../../../store';
-import { FilterOperatorOptions } from './Filter.constants';
-import { updateFilterValueDebounced } from './Filter.utils';
+import { FC, memo, useState, useEffect, ChangeEvent } from 'react'
+import { Button, Input, IconChevronDown, IconX } from '@supabase/ui'
+import { DropdownControl } from '../../common'
+import { useDispatch, useTrackedState } from '../../../store'
+import { FilterOperatorOptions } from './Filter.constants'
+import { updateFilterValueDebounced } from './Filter.utils'
/**
* use `now` to trigger re-render as filterIdx won't change value
* if not filterText state will not updated on delete filter
*/
type FilterRowProps = {
- filterIdx: number;
- now: number;
-};
+ filterIdx: number
+ now: number
+}
-const FilterRow: React.FC
= ({ filterIdx, now }) => {
- const state = useTrackedState();
- const dispatch = useDispatch();
- const filter = state.filters[filterIdx];
- const column = state.table?.columns.find((x) => x.name === filter.column);
+const FilterRow: FC = ({ filterIdx }) => {
+ const state = useTrackedState()
+ const dispatch = useDispatch()
+ const filter = state.filters[filterIdx]
+ const column = state.table?.columns.find((x) => x.name === filter.column)
const columnOptions =
state.table?.columns?.map((x) => {
- return { value: x.name, label: x.name, postLabel: x.dataType };
- }) || [];
- const [filterValue, setFilterValue] = React.useState(filter.value);
+ return { value: x.name, label: x.name, postLabel: x.dataType }
+ }) || []
+ const [filterValue, setFilterValue] = useState(filter.value)
- React.useEffect(() => {
- const filter = state.filters[filterIdx];
- setFilterValue(filter.value);
- }, [filterIdx, now]);
+ useEffect(() => {
+ const filter = state.filters[filterIdx]
+ setFilterValue(filter.value)
+ }, [filterIdx])
function onColumnChange(column: string | number) {
dispatch({
type: 'UPDATE_FILTER',
payload: { filterIdx, value: { ...filter, column } },
- });
+ })
}
function onOperatorChange(operator: string | number) {
dispatch({
type: 'UPDATE_FILTER',
payload: { filterIdx, value: { ...filter, operator } },
- });
+ })
}
- function onFilterChange(event: React.ChangeEvent) {
- const value = event.target.value;
- setFilterValue(value);
+ function onFilterChange(event: ChangeEvent) {
+ const value = event.target.value
+ setFilterValue(value)
updateFilterValueDebounced(
{
filterIdx,
value: { ...filter, value: value },
},
dispatch
- );
+ )
}
function onRemoveFilter() {
dispatch({
type: 'REMOVE_FILTER',
payload: { index: filterIdx },
- });
+ })
}
return (
-
+
= ({ filterIdx, now }) => {
{column?.name || ''}
-
+
= ({ filterIdx, now }) => {
onClick={onRemoveFilter}
/>
- );
-};
-export default React.memo(FilterRow);
+ )
+}
+export default memo(FilterRow)
diff --git a/studio/components/grid/query/QueryFilter.ts b/studio/components/grid/query/QueryFilter.ts
index 41e1ffbac11..ca560c20781 100644
--- a/studio/components/grid/query/QueryFilter.ts
+++ b/studio/components/grid/query/QueryFilter.ts
@@ -1,23 +1,16 @@
-import { Dictionary, Filter, FilterOperator, QueryTable, Sort } from '../types';
-import { IQueryModifier, QueryModifier } from './QueryModifier';
+import { uuidv4 } from 'lib/helpers'
+import { Dictionary, Filter, FilterOperator, QueryTable, Sort } from '../types'
+import { IQueryModifier, QueryModifier } from './QueryModifier'
export interface IQueryFilter {
- filter: (
- column: string,
- operator: FilterOperator,
- value: string
- ) => IQueryFilter;
- match: (criteria: Dictionary) => IQueryFilter;
- order: (
- column: string,
- ascending?: boolean,
- nullsFirst?: boolean
- ) => IQueryFilter;
+ filter: (column: string, operator: FilterOperator, value: string) => IQueryFilter
+ match: (criteria: Dictionary) => IQueryFilter
+ order: (column: string, ascending?: boolean, nullsFirst?: boolean) => IQueryFilter
}
export class QueryFilter implements IQueryFilter, IQueryModifier {
- protected filters: Filter[] = [];
- protected sorts: Sort[] = [];
+ protected filters: Filter[] = []
+ protected sorts: Sort[] = []
constructor(
protected table: QueryTable,
@@ -27,15 +20,15 @@ export class QueryFilter implements IQueryFilter, IQueryModifier {
) {}
filter(column: string, operator: FilterOperator, value: any) {
- this.filters.push({ column, operator, value });
- return this;
+ this.filters.push({ id: uuidv4(), column, operator, value })
+ return this
}
match(criteria: Dictionary) {
Object.entries(criteria).map(([column, value]) => {
- this.filters.push({ column, operator: '=', value });
- });
- return this;
+ this.filters.push({ id: uuidv4(), column, operator: '=', value })
+ })
+ return this
}
order(column: string, ascending = true, nullsFirst = false) {
@@ -43,16 +36,16 @@ export class QueryFilter implements IQueryFilter, IQueryModifier {
column: column,
ascending,
nullsFirst,
- });
- return this;
+ })
+ return this
}
range(from: number, to: number) {
- return this._getQueryModifier().range(from, to);
+ return this._getQueryModifier().range(from, to)
}
toSql() {
- return this._getQueryModifier().toSql();
+ return this._getQueryModifier().toSql()
}
_getQueryModifier() {
@@ -61,6 +54,6 @@ export class QueryFilter implements IQueryFilter, IQueryModifier {
actionOptions: this.actionOptions,
filters: this.filters,
sorts: this.sorts,
- });
+ })
}
}
diff --git a/studio/components/grid/store/reducers/filter.ts b/studio/components/grid/store/reducers/filter.ts
index da342e35144..c9f051326b3 100644
--- a/studio/components/grid/store/reducers/filter.ts
+++ b/studio/components/grid/store/reducers/filter.ts
@@ -1,116 +1,106 @@
-import update from 'immutability-helper';
-import { TOTAL_ROWS_RESET } from '../../constants';
-import { Filter } from '../../types';
-import { getInitialFilters } from '../../utils';
-import { INIT_ACTIONTYPE } from './base';
+import update from 'immutability-helper'
+import { TOTAL_ROWS_RESET } from '../../constants'
+import { Filter } from '../../types'
+import { getInitialFilters } from '../../utils'
+import { INIT_ACTIONTYPE } from './base'
export interface FilterInitialState {
- filters: Filter[];
+ filters: Filter[]
}
-export const filterInitialState: FilterInitialState = { filters: [] };
+export const filterInitialState: FilterInitialState = { filters: [] }
type FILTER_ACTIONTYPE =
| INIT_ACTIONTYPE
| {
- type: 'SET_FILTERS';
- payload: Filter[];
+ type: 'SET_FILTERS'
+ payload: Filter[]
}
| {
- type: 'ADD_FILTER';
- payload: Filter;
+ type: 'ADD_FILTER'
+ payload: Filter
}
| {
- type: 'REMOVE_FILTER';
- payload: { index: number };
+ type: 'REMOVE_FILTER'
+ payload: { index: number }
}
| {
- type: 'UPDATE_FILTER';
+ type: 'UPDATE_FILTER'
payload: {
- filterIdx: number;
- value: Filter;
- };
- };
+ filterIdx: number
+ value: Filter
+ }
+ }
-const FilterReducer = (
- state: FilterInitialState,
- action: FILTER_ACTIONTYPE
-) => {
+const FilterReducer = (state: FilterInitialState, action: FILTER_ACTIONTYPE) => {
switch (action.type) {
case 'INIT_TABLE': {
return {
...state,
- filters: getInitialFilters(
- action.payload.table,
- action.payload.savedState
- ),
- };
+ filters: getInitialFilters(action.payload.table, action.payload.savedState),
+ }
}
case 'SET_FILTERS':
return {
...state,
filters: action.payload,
- };
+ }
case 'ADD_FILTER': {
- const isValid = isValidFilter(action.payload);
+ const isValid = isValidFilter(action.payload)
const newState: any = {
...state,
filters: update(state.filters, { $push: [action.payload] }),
- };
- if (isValid) {
- newState.page = 1;
- newState.refreshPageFlag = Date.now();
- newState.totalRows = TOTAL_ROWS_RESET;
}
- return newState;
+ if (isValid) {
+ newState.page = 1
+ newState.refreshPageFlag = Date.now()
+ newState.totalRows = TOTAL_ROWS_RESET
+ }
+ return newState
}
case 'REMOVE_FILTER': {
- const removeIdx = action.payload.index;
- const removeFilter = state.filters[removeIdx];
- const isValid = isValidFilter(removeFilter);
+ const removeIdx = action.payload.index
+ const removeFilter = state.filters[removeIdx]
+
+ const isValid = isValidFilter(removeFilter)
const newState: any = {
...state,
filters: update(state.filters, {
$splice: [[removeIdx, 1]],
}),
- };
- if (isValid) {
- newState.page = 1;
- newState.refreshPageFlag = Date.now();
- newState.totalRows = TOTAL_ROWS_RESET;
}
- return newState;
+
+ if (isValid) {
+ newState.page = 1
+ newState.refreshPageFlag = Date.now()
+ newState.totalRows = TOTAL_ROWS_RESET
+ }
+ return newState
}
case 'UPDATE_FILTER': {
- const updatedFilter = state.filters[action.payload.filterIdx];
- const previousIsValid = isValidFilter(updatedFilter);
- const afterIsValid = isValidFilter(action.payload.value);
+ const updatedFilter = state.filters[action.payload.filterIdx]
+ const previousIsValid = isValidFilter(updatedFilter)
+ const afterIsValid = isValidFilter(action.payload.value)
const newState: any = {
...state,
filters: update(state.filters, {
[action.payload.filterIdx]: { $set: action.payload.value },
}),
- };
- if (previousIsValid || afterIsValid) {
- newState.page = 1;
- newState.refreshPageFlag = Date.now();
- newState.totalRows = TOTAL_ROWS_RESET;
}
- return newState;
+ if (previousIsValid || afterIsValid) {
+ newState.page = 1
+ newState.refreshPageFlag = Date.now()
+ newState.totalRows = TOTAL_ROWS_RESET
+ }
+ return newState
}
default:
- return state;
+ return state
}
-};
+}
-export default FilterReducer;
+export default FilterReducer
function isValidFilter(filter: Filter) {
- return (
- filter &&
- filter.column &&
- filter.column != '' &&
- filter.value &&
- filter.value != ''
- );
+ return filter && filter.column && filter.column != '' && filter.value && filter.value != ''
}
diff --git a/studio/components/grid/types/base.ts b/studio/components/grid/types/base.ts
index 56ccfbd4650..ffa24b849b3 100644
--- a/studio/components/grid/types/base.ts
+++ b/studio/components/grid/types/base.ts
@@ -1,16 +1,13 @@
-import {
- CalculatedColumn,
- HeaderRendererProps,
-} from '@supabase/react-data-grid';
+import { CalculatedColumn, HeaderRendererProps } from '@supabase/react-data-grid'
export interface Dictionary {
- [Key: string]: T;
+ [Key: string]: T
}
export interface Sort {
- column: string;
- ascending?: boolean;
- nullsFirst?: boolean;
+ column: string
+ ascending?: boolean
+ nullsFirst?: boolean
}
export type FilterOperator =
@@ -25,23 +22,24 @@ export type FilterOperator =
| '!~~'
| '!~~*'
| 'in'
- | 'is';
+ | 'is'
export interface Filter {
- column: string;
- operator: FilterOperator;
- value: any;
+ id: string
+ column: string
+ operator: FilterOperator
+ value: any
}
export interface SavedState {
- filters: Filter[];
- gridColumns: CalculatedColumn[];
- sorts: Sort[];
+ filters: Filter[]
+ gridColumns: CalculatedColumn[]
+ sorts: Sort[]
}
export interface DragItem {
- index: number;
- key: string;
+ index: number
+ key: string
}
export type ColumnType =
@@ -56,10 +54,10 @@ export type ColumnType =
| 'primary_key'
| 'text'
| 'time'
- | 'unknown';
+ | 'unknown'
export interface ColumnHeaderProps extends HeaderRendererProps {
- columnType: ColumnType;
- isPrimaryKey: Boolean | undefined;
- format: string;
+ columnType: ColumnType
+ isPrimaryKey: Boolean | undefined
+ format: string
}
diff --git a/studio/components/grid/utils/filter.ts b/studio/components/grid/utils/filter.ts
index 1b11a6807e1..d81d59f0939 100644
--- a/studio/components/grid/utils/filter.ts
+++ b/studio/components/grid/utils/filter.ts
@@ -1,16 +1,16 @@
-import { Filter, SavedState, SupaTable } from '../types';
+import { uuidv4 } from 'lib/helpers'
+import { Filter, SavedState, SupaTable } from '../types'
-export function getInitialFilters(
- table: SupaTable,
- savedState?: SavedState
-): Filter[] {
+export function getInitialFilters(table: SupaTable, savedState?: SavedState): Filter[] {
if (savedState?.filters) {
// verify column still exists
const filters = savedState.filters.filter((x) => {
- const found = table.columns.find((y) => y.name === x.column);
- return found ? true : false;
- });
- if (filters?.length > 0) return filters;
+ const found = table.columns.find((y) => y.name === x.column)
+ return found ? true : false
+ })
+ if (filters?.length > 0) {
+ return filters.map((filter) => ({ ...filter, id: filter?.id || uuidv4() }))
+ }
}
- return [];
+ return []
}
diff --git a/studio/components/interfaces/App/AppBannerWrapper.tsx b/studio/components/interfaces/App/AppBannerWrapper.tsx
new file mode 100644
index 00000000000..51117e187bd
--- /dev/null
+++ b/studio/components/interfaces/App/AppBannerWrapper.tsx
@@ -0,0 +1,29 @@
+import { FC } from 'react'
+import Link from 'next/link'
+import { useFlag } from 'hooks'
+import { IconExternalLink } from '@supabase/ui'
+
+const AppBannerWrapper: FC = ({ children }) => {
+ const ongoingIncident = useFlag('ongoingIncident')
+
+ return (
+
+ )
+}
+
+export default AppBannerWrapper
diff --git a/studio/components/interfaces/App/index.ts b/studio/components/interfaces/App/index.ts
index f65fabe0209..4e92356a261 100644
--- a/studio/components/interfaces/App/index.ts
+++ b/studio/components/interfaces/App/index.ts
@@ -1,5 +1,6 @@
import PortalToast from './PortalToast'
import GoTrueWrapper from './GoTrueWrapper/GoTrueWrapper'
import RouteValidationWrapper from './RouteValidationWrapper'
+import AppBannerWrapper from './AppBannerWrapper'
-export { PortalToast, GoTrueWrapper, RouteValidationWrapper }
+export { PortalToast, GoTrueWrapper, RouteValidationWrapper, AppBannerWrapper }
diff --git a/studio/components/interfaces/Authentication/Policies/PolicyEditor/PolicyDefinition.tsx b/studio/components/interfaces/Authentication/Policies/PolicyEditor/PolicyDefinition.tsx
index bb3e3033939..b43bc9a4b56 100644
--- a/studio/components/interfaces/Authentication/Policies/PolicyEditor/PolicyDefinition.tsx
+++ b/studio/components/interfaces/Authentication/Policies/PolicyEditor/PolicyDefinition.tsx
@@ -1,14 +1,14 @@
import { FC, useEffect } from 'react'
import { usePrevious } from 'hooks'
-import SqlEditor from 'components/to-be-cleaned/SqlEditor'
+import SqlEditor from 'components/ui/SqlEditor'
interface Props {
operation: string
definition: string
check: string
- onUpdatePolicyUsing: (using: string | null) => void
- onUpdatePolicyCheck: (check: string | null) => void
+ onUpdatePolicyUsing: (using: string | undefined) => void
+ onUpdatePolicyCheck: (check: string | undefined) => void
}
const PolicyDefinition: FC = ({
@@ -24,8 +24,8 @@ const PolicyDefinition: FC = ({
const previousOperation = usePrevious(operation) || ''
useEffect(() => {
- if (showUsing(previousOperation) && !showUsing(operation)) onUpdatePolicyUsing(null)
- if (showCheck(previousOperation) && !showCheck(operation)) onUpdatePolicyCheck(null)
+ if (showUsing(previousOperation) && !showUsing(operation)) onUpdatePolicyUsing(undefined)
+ if (showCheck(previousOperation) && !showCheck(operation)) onUpdatePolicyCheck(undefined)
}, [operation])
return (
diff --git a/studio/components/interfaces/Authentication/Policies/PolicyEditor/index.tsx b/studio/components/interfaces/Authentication/Policies/PolicyEditor/index.tsx
index 454a6f7da33..df32f24a78d 100644
--- a/studio/components/interfaces/Authentication/Policies/PolicyEditor/index.tsx
+++ b/studio/components/interfaces/Authentication/Policies/PolicyEditor/index.tsx
@@ -68,10 +68,10 @@ const PolicyEditor: FC = ({
operation={operation}
definition={definition}
check={check}
- onUpdatePolicyUsing={(definition: string | null) =>
+ onUpdatePolicyUsing={(definition: string | undefined) =>
onUpdatePolicyFormFields({ definition })
}
- onUpdatePolicyCheck={(check: string | null) => onUpdatePolicyFormFields({ check })}
+ onUpdatePolicyCheck={(check: string | undefined) => onUpdatePolicyFormFields({ check })}
/>
diff --git a/studio/components/interfaces/Authentication/Policies/PolicyEditorModal/PolicyEditorModal.constants.ts b/studio/components/interfaces/Authentication/Policies/PolicyEditorModal/PolicyEditorModal.constants.ts
index 990ad6e0a5e..e6487f59eec 100644
--- a/studio/components/interfaces/Authentication/Policies/PolicyEditorModal/PolicyEditorModal.constants.ts
+++ b/studio/components/interfaces/Authentication/Policies/PolicyEditorModal/PolicyEditorModal.constants.ts
@@ -26,7 +26,7 @@ ON ${schema}.${table}
FOR SELECT USING (
true
);`.trim(),
- name: 'Enable access to all users',
+ name: 'Enable read access for all users',
definition: 'true',
check: '',
command: 'SELECT',
diff --git a/studio/components/interfaces/Authentication/Policies/PolicyReview.tsx b/studio/components/interfaces/Authentication/Policies/PolicyReview.tsx
index 0422d3f43be..c4b26e5cfb2 100644
--- a/studio/components/interfaces/Authentication/Policies/PolicyReview.tsx
+++ b/studio/components/interfaces/Authentication/Policies/PolicyReview.tsx
@@ -1,7 +1,7 @@
import { Button, Modal } from '@supabase/ui'
import { isEmpty } from 'lodash'
import { FC, useState } from 'react'
-import SqlEditor from 'components/to-be-cleaned/SqlEditor'
+import SqlEditor from 'components/ui/SqlEditor'
import { PolicyForReview } from './Policies.types'
interface Props {
diff --git a/studio/components/interfaces/Authentication/Policies/PolicyTableRow/PolicyRow.tsx b/studio/components/interfaces/Authentication/Policies/PolicyTableRow/PolicyRow.tsx
index 9f1e73c247c..8170c6e3284 100644
--- a/studio/components/interfaces/Authentication/Policies/PolicyTableRow/PolicyRow.tsx
+++ b/studio/components/interfaces/Authentication/Policies/PolicyTableRow/PolicyRow.tsx
@@ -1,6 +1,6 @@
import { FC } from 'react'
import { Button, Dropdown, IconEdit, IconTrash, IconMoreVertical } from '@supabase/ui'
-import Panel from 'components/to-be-cleaned/Panel'
+import Panel from 'components/ui/Panel'
import { PostgresPolicy } from '@supabase/postgres-meta'
interface Props {
diff --git a/studio/components/interfaces/Authentication/Policies/PolicyTableRow/index.tsx b/studio/components/interfaces/Authentication/Policies/PolicyTableRow/index.tsx
index 68b16f06484..b9aa4499cb4 100644
--- a/studio/components/interfaces/Authentication/Policies/PolicyTableRow/index.tsx
+++ b/studio/components/interfaces/Authentication/Policies/PolicyTableRow/index.tsx
@@ -5,7 +5,7 @@ import { useStore } from 'hooks'
import PolicyTableRowHeader from './PolicyTableRowHeader'
import PolicyRow from './PolicyRow'
-import Panel from 'components/to-be-cleaned/Panel'
+import Panel from 'components/ui/Panel'
interface Props {
table: PostgresTable
diff --git a/studio/components/interfaces/Authentication/Policies/PolicyTemplates/TemplatePreview.tsx b/studio/components/interfaces/Authentication/Policies/PolicyTemplates/TemplatePreview.tsx
index 73be091036f..97b59f24ad2 100644
--- a/studio/components/interfaces/Authentication/Policies/PolicyTemplates/TemplatePreview.tsx
+++ b/studio/components/interfaces/Authentication/Policies/PolicyTemplates/TemplatePreview.tsx
@@ -1,6 +1,6 @@
import { FC } from 'react'
import { isEmpty } from 'lodash'
-import SqlEditor from 'components/to-be-cleaned/SqlEditor'
+import SqlEditor from 'components/ui/SqlEditor'
import { PolicyTemplate } from './PolicyTemplates.constants'
interface Props {
diff --git a/studio/components/interfaces/Billing/AddOns/AddOns.utils.ts b/studio/components/interfaces/Billing/AddOns/AddOns.utils.ts
index 8198cec09a0..fb55d21b3b3 100644
--- a/studio/components/interfaces/Billing/AddOns/AddOns.utils.ts
+++ b/studio/components/interfaces/Billing/AddOns/AddOns.utils.ts
@@ -7,7 +7,6 @@ export const formatComputeSizes = (computeSizes: any[]) => {
const microOption = {
id: '',
name: 'Micro Add-on',
- description: 'Basic set up to get started',
metadata: {
default_price_id: undefined,
supabase_prod_id: 'addon_instance_micro',
@@ -29,30 +28,23 @@ export const formatComputeSizes = (computeSizes: any[]) => {
],
}
+ const addonsOrder = [
+ 'addon_instance_small',
+ 'addon_instance_medium',
+ 'addon_instance_large',
+ 'addon_instance_xlarge',
+ 'addon_instance_xxlarge',
+ 'addon_instance_4xlarge',
+ 'addon_instance_8xlarge',
+ 'addon_instance_12xlarge',
+ 'addon_instance_16xlarge',
+ ]
+
return [microOption]
.concat(
- computeSizes.filter(
- (option: any) => option.metadata.supabase_prod_id === 'addon_instance_small'
- )
- )
- .concat(
- computeSizes.filter(
- (option: any) => option.metadata.supabase_prod_id === 'addon_instance_medium'
- )
- )
- .concat(
- computeSizes.filter(
- (option: any) => option.metadata.supabase_prod_id === 'addon_instance_large'
- )
- )
- .concat(
- computeSizes.filter(
- (option: any) => option.metadata.supabase_prod_id === 'addon_instance_xlarge'
- )
- )
- .concat(
- computeSizes.filter(
- (option: any) => option.metadata.supabase_prod_id === 'addon_instance_xxlarge'
- )
+ addonsOrder.map((id: string) => {
+ return computeSizes.find((option: any) => option.metadata.supabase_prod_id === id)
+ })
)
+ .filter((option) => option !== undefined)
}
diff --git a/studio/components/interfaces/Billing/AddOns/ComputeSizeSelection.tsx b/studio/components/interfaces/Billing/AddOns/ComputeSizeSelection.tsx
index 48a32c0f2c4..e3940c04895 100644
--- a/studio/components/interfaces/Billing/AddOns/ComputeSizeSelection.tsx
+++ b/studio/components/interfaces/Billing/AddOns/ComputeSizeSelection.tsx
@@ -1,12 +1,14 @@
import { FC } from 'react'
import Link from 'next/link'
import { Badge, Button, Radio } from '@supabase/ui'
-import { useStore } from 'hooks'
+
+import { useStore, useFlag } from 'hooks'
import { getProductPrice } from '../Billing.utils'
+import DisabledWarningDueToIncident from 'components/ui/DisabledWarningDueToIncident'
interface Props {
computeSizes: any[]
- currentComputeSize: any
+ currentComputeSize?: any
selectedComputeSize: any
onSelectOption: (option: any) => void
}
@@ -17,10 +19,9 @@ const ComputeSizeSelection: FC
= ({
selectedComputeSize,
onSelectOption,
}) => {
- // [Joshen] We should have some indication on what's the current compute
- // size of the project based on currentComputeSize
const { ui } = useStore()
const projectRef = ui.selectedProjectRef
+ const addonUpdateDisabled = useFlag('disableProjectCreationAndUpdate')
return (
@@ -29,49 +30,60 @@ const ComputeSizeSelection: FC
= ({
Database add-ons
Optional
-
+
Choose the database instance size that best fits your needs