diff --git a/packages/manager/.changeset/pr-11790-removed-1741678858029.md b/packages/manager/.changeset/pr-11790-removed-1741678858029.md new file mode 100644 index 00000000000..062d5dcd4a9 --- /dev/null +++ b/packages/manager/.changeset/pr-11790-removed-1741678858029.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Removed +--- + +Move `ListItemOption` from `manager` to `ui` package ([#11790](https://github.com/linode/manager/pull/11790)) diff --git a/packages/manager/.changeset/pr-11790-removed-1741678912235.md b/packages/manager/.changeset/pr-11790-removed-1741678912235.md new file mode 100644 index 00000000000..ef01ea6e319 --- /dev/null +++ b/packages/manager/.changeset/pr-11790-removed-1741678912235.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Removed +--- + +Move `regionsData` from `manager` to `utilities` package ([#11790](https://github.com/linode/manager/pull/11790)) diff --git a/packages/manager/.changeset/pr-11790-removed-1742396865376.md b/packages/manager/.changeset/pr-11790-removed-1742396865376.md new file mode 100644 index 00000000000..7d7eeb8e50e --- /dev/null +++ b/packages/manager/.changeset/pr-11790-removed-1742396865376.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Removed +--- + +Move `LinodeCreateType` to `utilities` package ([#11790](https://github.com/linode/manager/pull/11790)) diff --git a/packages/manager/.changeset/pr-11790-tech-stories-1741678788058.md b/packages/manager/.changeset/pr-11790-tech-stories-1741678788058.md new file mode 100644 index 00000000000..06030801f26 --- /dev/null +++ b/packages/manager/.changeset/pr-11790-tech-stories-1741678788058.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tech Stories +--- + +Make `RegionSelect` and `RegionMultiSelect` pure ([#11790](https://github.com/linode/manager/pull/11790)) diff --git a/packages/manager/cypress/component/components/region-select.spec.tsx b/packages/manager/cypress/component/components/region-select.spec.tsx index 656d5dacaf3..0e18e24fb0f 100644 --- a/packages/manager/cypress/component/components/region-select.spec.tsx +++ b/packages/manager/cypress/component/components/region-select.spec.tsx @@ -1,3 +1,4 @@ +import { accountAvailabilityFactory, regionFactory } from '@linode/utilities'; import * as React from 'react'; import { mockGetAccountAvailability } from 'support/intercepts/account'; import { ui } from 'support/ui'; @@ -6,7 +7,6 @@ import { createSpy } from 'support/util/components'; import { componentTests, visualTests } from 'support/util/components'; import { RegionSelect } from 'src/components/RegionSelect/RegionSelect'; -import { accountAvailabilityFactory, regionFactory } from 'src/factories'; componentTests('RegionSelect', (mount) => { beforeEach(() => { @@ -26,6 +26,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={[region]} value={undefined} @@ -54,6 +55,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={[region]} value={undefined} @@ -83,6 +85,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={[region]} value={undefined} @@ -112,6 +115,7 @@ componentTests('RegionSelect', (mount) => { Other Element {}} regions={[region]} value={undefined} @@ -145,6 +149,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={regions} value={undefined} @@ -179,6 +184,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={regions} value={regionToPreselect.id} @@ -214,6 +220,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={regions} value={regionToSelect.id} @@ -241,6 +248,7 @@ componentTests('RegionSelect', (mount) => { {}} regions={regions} value={regionToSelect.id} @@ -260,6 +268,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={regions} value={undefined} @@ -277,6 +286,7 @@ componentTests('RegionSelect', (mount) => { mount( { mount( { mount( {}} regions={regions} value={undefined} @@ -379,6 +391,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={regions} value={undefined} @@ -408,6 +421,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={regions} value={undefined} @@ -438,6 +452,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={regions} value={undefined} @@ -450,6 +465,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={regions} value={selectedRegion.id} @@ -462,6 +478,7 @@ componentTests('RegionSelect', (mount) => { mount( {}} regions={regions} value={selectedRegion.id} diff --git a/packages/manager/cypress/e2e/core/cloudpulse/alert-show-details.spec.ts b/packages/manager/cypress/e2e/core/cloudpulse/alert-show-details.spec.ts index cc1eb5f9dbf..5dfa6cbc1c5 100644 --- a/packages/manager/cypress/e2e/core/cloudpulse/alert-show-details.spec.ts +++ b/packages/manager/cypress/e2e/core/cloudpulse/alert-show-details.spec.ts @@ -4,7 +4,7 @@ * This file contains Cypress tests that validate the display and content of the Alerts Show Detail Page in the CloudPulse application. * It ensures that all alert details, criteria, and resource information are displayed correctly. */ -import { capitalize } from '@linode/utilities'; +import { capitalize, regionFactory } from '@linode/utilities'; import { aggregationTypeMap, dimensionOperatorTypeMap, @@ -28,7 +28,6 @@ import { alertRulesFactory, databaseFactory, notificationChannelFactory, - regionFactory, } from 'src/factories'; import { formatDate } from 'src/utilities/formatDate'; diff --git a/packages/manager/cypress/e2e/core/cloudpulse/cloudpulse-dashboard-errors.spec.ts b/packages/manager/cypress/e2e/core/cloudpulse/cloudpulse-dashboard-errors.spec.ts index 663108e3b42..24571e6df3d 100644 --- a/packages/manager/cypress/e2e/core/cloudpulse/cloudpulse-dashboard-errors.spec.ts +++ b/packages/manager/cypress/e2e/core/cloudpulse/cloudpulse-dashboard-errors.spec.ts @@ -1,6 +1,7 @@ /** * @file Error Handling Tests for CloudPulse Dashboard. */ +import { regionFactory } from '@linode/utilities'; import { widgetDetails } from 'support/constants/widgets'; import { mockGetAccount } from 'support/intercepts/account'; import { @@ -32,7 +33,6 @@ import { dashboardFactory, dashboardMetricFactory, databaseFactory, - regionFactory, widgetFactory, } from 'src/factories'; diff --git a/packages/manager/cypress/e2e/core/cloudpulse/create-user-alert.spec.ts b/packages/manager/cypress/e2e/core/cloudpulse/create-user-alert.spec.ts index 7b5fdff0cb1..7a12abb99b1 100644 --- a/packages/manager/cypress/e2e/core/cloudpulse/create-user-alert.spec.ts +++ b/packages/manager/cypress/e2e/core/cloudpulse/create-user-alert.spec.ts @@ -2,6 +2,7 @@ * @fileoverview Cypress test suite for the "Create Alert" functionality. */ +import { regionFactory } from '@linode/utilities'; import { statusMap } from 'support/constants/alert'; import { widgetDetails } from 'support/constants/widgets'; import { mockGetAccount } from 'support/intercepts/account'; @@ -26,7 +27,6 @@ import { databaseFactory, memoryRulesFactory, notificationChannelFactory, - regionFactory, triggerConditionFactory, } from 'src/factories'; import { formatDate } from 'src/utilities/formatDate'; diff --git a/packages/manager/cypress/e2e/core/cloudpulse/dbaas-widgets-verification.spec.ts b/packages/manager/cypress/e2e/core/cloudpulse/dbaas-widgets-verification.spec.ts index 6b88891e6c4..e56c52232f3 100644 --- a/packages/manager/cypress/e2e/core/cloudpulse/dbaas-widgets-verification.spec.ts +++ b/packages/manager/cypress/e2e/core/cloudpulse/dbaas-widgets-verification.spec.ts @@ -1,6 +1,7 @@ /** * @file Integration Tests for CloudPulse Dbass Dashboard. */ +import { regionFactory } from '@linode/utilities'; import { widgetDetails } from 'support/constants/widgets'; import { mockGetAccount } from 'support/intercepts/account'; import { @@ -27,7 +28,6 @@ import { databaseFactory, kubeLinodeFactory, linodeFactory, - regionFactory, widgetFactory, } from 'src/factories'; import { generateGraphData } from 'src/features/CloudPulse/Utils/CloudPulseWidgetUtils'; diff --git a/packages/manager/cypress/e2e/core/cloudpulse/edit-system-alert.spec.ts b/packages/manager/cypress/e2e/core/cloudpulse/edit-system-alert.spec.ts index b0f28d636c0..de0def5b4b4 100644 --- a/packages/manager/cypress/e2e/core/cloudpulse/edit-system-alert.spec.ts +++ b/packages/manager/cypress/e2e/core/cloudpulse/edit-system-alert.spec.ts @@ -4,6 +4,7 @@ * This file contains Cypress tests for the Edit Alert page of the CloudPulse application. * It ensures that users can navigate to the Edit Alert Page and that alerts are correctly displayed and interactive on the Edit page. */ +import { regionFactory } from '@linode/utilities'; import { mockGetAccount } from 'support/intercepts/account'; import { mockGetAlertDefinitions, @@ -15,12 +16,7 @@ import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { mockGetRegions } from 'support/intercepts/regions'; import { ui } from 'support/ui'; -import { - accountFactory, - alertFactory, - databaseFactory, - regionFactory, -} from 'src/factories'; +import { accountFactory, alertFactory, databaseFactory } from 'src/factories'; import type { Alert, Database } from '@linode/api-v4'; import type { Flags } from 'src/featureFlags'; diff --git a/packages/manager/cypress/e2e/core/cloudpulse/edit-user-alert.spec.ts b/packages/manager/cypress/e2e/core/cloudpulse/edit-user-alert.spec.ts index a39d248f5c6..e9aae01f0bc 100644 --- a/packages/manager/cypress/e2e/core/cloudpulse/edit-user-alert.spec.ts +++ b/packages/manager/cypress/e2e/core/cloudpulse/edit-user-alert.spec.ts @@ -5,6 +5,7 @@ * It verifies that alert details are correctly displayed, interactive, and editable. */ +import { regionFactory } from '@linode/utilities'; import { EVALUATION_PERIOD_DESCRIPTION, METRIC_DESCRIPTION_DATA_FIELD, @@ -36,7 +37,6 @@ import { databaseFactory, memoryRulesFactory, notificationChannelFactory, - regionFactory, triggerConditionFactory, } from 'src/factories'; import { formatDate } from 'src/utilities/formatDate'; diff --git a/packages/manager/cypress/e2e/core/cloudpulse/linode-widget-verification.spec.ts b/packages/manager/cypress/e2e/core/cloudpulse/linode-widget-verification.spec.ts index 640d5b22b87..b3323f2b5b3 100644 --- a/packages/manager/cypress/e2e/core/cloudpulse/linode-widget-verification.spec.ts +++ b/packages/manager/cypress/e2e/core/cloudpulse/linode-widget-verification.spec.ts @@ -1,6 +1,7 @@ /** * @file Integration Tests for CloudPulse Linode Dashboard. */ +import { regionFactory } from '@linode/utilities'; import { widgetDetails } from 'support/constants/widgets'; import { mockGetAccount } from 'support/intercepts/account'; import { @@ -25,7 +26,6 @@ import { dashboardMetricFactory, kubeLinodeFactory, linodeFactory, - regionFactory, widgetFactory, } from 'src/factories'; import { generateGraphData } from 'src/features/CloudPulse/Utils/CloudPulseWidgetUtils'; diff --git a/packages/manager/cypress/e2e/core/cloudpulse/timerange-verification.spec.ts b/packages/manager/cypress/e2e/core/cloudpulse/timerange-verification.spec.ts index 8dab09b4141..17d5a0d5f84 100644 --- a/packages/manager/cypress/e2e/core/cloudpulse/timerange-verification.spec.ts +++ b/packages/manager/cypress/e2e/core/cloudpulse/timerange-verification.spec.ts @@ -1,6 +1,7 @@ /** * @file Integration Tests for CloudPulse Custom and Preset Verification */ +import { regionFactory } from '@linode/utilities'; import { DateTime } from 'luxon'; import { widgetDetails } from 'support/constants/widgets'; import { mockGetAccount } from 'support/intercepts/account'; @@ -29,7 +30,6 @@ import { dashboardMetricFactory, databaseFactory, profileFactory, - regionFactory, widgetFactory, } from 'src/factories'; import { convertToGmt } from 'src/features/CloudPulse/Utils/CloudPulseDateTimePickerUtils'; diff --git a/packages/manager/cypress/e2e/core/firewalls/migrate-linode-with-firewall.spec.ts b/packages/manager/cypress/e2e/core/firewalls/migrate-linode-with-firewall.spec.ts index 241e0652c41..6856938f28e 100644 --- a/packages/manager/cypress/e2e/core/firewalls/migrate-linode-with-firewall.spec.ts +++ b/packages/manager/cypress/e2e/core/firewalls/migrate-linode-with-firewall.spec.ts @@ -1,9 +1,9 @@ /* eslint-disable sonarjs/no-duplicate-string */ +import { regionFactory } from '@linode/utilities'; import { createLinodeRequestFactory, firewallFactory, linodeFactory, - regionFactory, } from '@src/factories'; import { authenticate } from 'support/api/authentication'; import { diff --git a/packages/manager/cypress/e2e/core/general/gdpr-agreement.spec.ts b/packages/manager/cypress/e2e/core/general/gdpr-agreement.spec.ts index 69f9ff92b38..529867889bc 100644 --- a/packages/manager/cypress/e2e/core/general/gdpr-agreement.spec.ts +++ b/packages/manager/cypress/e2e/core/general/gdpr-agreement.spec.ts @@ -1,4 +1,5 @@ -import { linodeFactory, regionFactory } from '@src/factories'; +import { regionFactory } from '@linode/utilities'; +import { linodeFactory } from '@src/factories'; import { mockGetAccountAgreements } from 'support/intercepts/account'; import { mockCreateLinode } from 'support/intercepts/linodes'; import { mockGetRegions } from 'support/intercepts/regions'; diff --git a/packages/manager/cypress/e2e/core/images/manage-image-regions.spec.ts b/packages/manager/cypress/e2e/core/images/manage-image-regions.spec.ts index 215ebb55219..c4139b628ad 100644 --- a/packages/manager/cypress/e2e/core/images/manage-image-regions.spec.ts +++ b/packages/manager/cypress/e2e/core/images/manage-image-regions.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockGetCustomImages, mockGetImage, @@ -8,7 +9,7 @@ import { mockGetRegions } from 'support/intercepts/regions'; import { ui } from 'support/ui'; import { extendRegion } from 'support/util/regions'; -import { imageFactory, regionFactory } from 'src/factories'; +import { imageFactory } from 'src/factories'; import type { Image, Region } from '@linode/api-v4'; diff --git a/packages/manager/cypress/e2e/core/kubernetes/lke-create.spec.ts b/packages/manager/cypress/e2e/core/kubernetes/lke-create.spec.ts index 5a3b3490b3e..920ad23698b 100644 --- a/packages/manager/cypress/e2e/core/kubernetes/lke-create.spec.ts +++ b/packages/manager/cypress/e2e/core/kubernetes/lke-create.spec.ts @@ -1,7 +1,7 @@ /** * @file LKE creation end-to-end tests. */ -import { pluralize } from '@linode/utilities'; +import { pluralize, regionFactory } from '@linode/utilities'; import { dcPricingDocsLabel, dcPricingDocsUrl, @@ -52,7 +52,6 @@ import { linodeTypeFactory, lkeHighAvailabilityTypeFactory, nodePoolFactory, - regionFactory, } from 'src/factories'; import { CLUSTER_TIER_DOCS_LINK, diff --git a/packages/manager/cypress/e2e/core/linodes/create-linode-in-core-region.spec.ts b/packages/manager/cypress/e2e/core/linodes/create-linode-in-core-region.spec.ts index 7c82a1177d0..71ae9f83058 100644 --- a/packages/manager/cypress/e2e/core/linodes/create-linode-in-core-region.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/create-linode-in-core-region.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { mockCreateLinode } from 'support/intercepts/linodes'; import { @@ -8,7 +9,7 @@ import { ui } from 'support/ui'; import { linodeCreatePage } from 'support/ui/pages'; import { randomLabel, randomString } from 'support/util/random'; -import { linodeFactory, regionFactory } from 'src/factories'; +import { linodeFactory } from 'src/factories'; describe('Create Linode in a Core Region', () => { /* diff --git a/packages/manager/cypress/e2e/core/linodes/create-linode-in-distributed-region.spec.ts b/packages/manager/cypress/e2e/core/linodes/create-linode-in-distributed-region.spec.ts index 746117f2952..ac52798d3c4 100644 --- a/packages/manager/cypress/e2e/core/linodes/create-linode-in-distributed-region.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/create-linode-in-distributed-region.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { mockCreateLinode, @@ -12,7 +13,7 @@ import { linodeCreatePage } from 'support/ui/pages'; import { randomLabel, randomString } from 'support/util/random'; import { extendRegion } from 'support/util/regions'; -import { linodeFactory, linodeTypeFactory, regionFactory } from 'src/factories'; +import { linodeFactory, linodeTypeFactory } from 'src/factories'; import type { Region } from '@linode/api-v4'; diff --git a/packages/manager/cypress/e2e/core/linodes/create-linode-region-select.spec.ts b/packages/manager/cypress/e2e/core/linodes/create-linode-region-select.spec.ts index 914b1dc8d3a..aa4275e4f34 100644 --- a/packages/manager/cypress/e2e/core/linodes/create-linode-region-select.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/create-linode-region-select.spec.ts @@ -1,4 +1,4 @@ -import { regionFactory } from '@src/factories'; +import { regionFactory } from '@linode/utilities'; import { mockGetRegions } from 'support/intercepts/regions'; import { ui } from 'support/ui'; import { extendRegion } from 'support/util/regions'; diff --git a/packages/manager/cypress/e2e/core/linodes/create-linode-with-disk-encryption.spec.ts b/packages/manager/cypress/e2e/core/linodes/create-linode-with-disk-encryption.spec.ts index 884fc31471c..de6534ef710 100644 --- a/packages/manager/cypress/e2e/core/linodes/create-linode-with-disk-encryption.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/create-linode-with-disk-encryption.spec.ts @@ -1,8 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import { accountFactory, linodeFactory, linodeTypeFactory, - regionFactory, } from '@src/factories'; import { mockGetAccount } from 'support/intercepts/account'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; diff --git a/packages/manager/cypress/e2e/core/linodes/create-linode-with-user-data.spec.ts b/packages/manager/cypress/e2e/core/linodes/create-linode-with-user-data.spec.ts index d112ad97449..c500e0f5a94 100644 --- a/packages/manager/cypress/e2e/core/linodes/create-linode-with-user-data.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/create-linode-with-user-data.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockGetAllImages, mockGetImage } from 'support/intercepts/images'; import { mockCreateLinode, @@ -9,7 +10,7 @@ import { linodeCreatePage } from 'support/ui/pages'; import { randomLabel, randomNumber, randomString } from 'support/util/random'; import { chooseRegion } from 'support/util/regions'; -import { imageFactory, linodeFactory, regionFactory } from 'src/factories'; +import { imageFactory, linodeFactory } from 'src/factories'; describe('Create Linode with user data', () => { /* diff --git a/packages/manager/cypress/e2e/core/linodes/create-linode-with-vlan.spec.ts b/packages/manager/cypress/e2e/core/linodes/create-linode-with-vlan.spec.ts index 7515c251c16..8a1b4cdc67f 100644 --- a/packages/manager/cypress/e2e/core/linodes/create-linode-with-vlan.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/create-linode-with-vlan.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { mockCreateLinode } from 'support/intercepts/linodes'; import { mockGetRegions } from 'support/intercepts/regions'; @@ -12,7 +13,7 @@ import { } from 'support/util/random'; import { chooseRegion } from 'support/util/regions'; -import { VLANFactory, linodeFactory, regionFactory } from 'src/factories'; +import { VLANFactory, linodeFactory } from 'src/factories'; describe('Create Linode with VLANs', () => { beforeEach(() => { diff --git a/packages/manager/cypress/e2e/core/linodes/create-linode-with-vpc.spec.ts b/packages/manager/cypress/e2e/core/linodes/create-linode-with-vpc.spec.ts index 7cf424d3faf..1aa3877ae42 100644 --- a/packages/manager/cypress/e2e/core/linodes/create-linode-with-vpc.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/create-linode-with-vpc.spec.ts @@ -1,4 +1,7 @@ -import { linodeConfigInterfaceFactoryWithVPC } from '@linode/utilities'; +import { + linodeConfigInterfaceFactoryWithVPC, + regionFactory, +} from '@linode/utilities'; import { mockGetLinodeConfigs } from 'support/intercepts/configs'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { @@ -27,7 +30,6 @@ import { chooseRegion } from 'support/util/regions'; import { linodeConfigFactory, linodeFactory, - regionFactory, subnetFactory, vpcFactory, } from 'src/factories'; diff --git a/packages/manager/cypress/e2e/core/linodes/create-linode.spec.ts b/packages/manager/cypress/e2e/core/linodes/create-linode.spec.ts index fb5bc50cea9..7e01e91e1f0 100644 --- a/packages/manager/cypress/e2e/core/linodes/create-linode.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/create-linode.spec.ts @@ -5,6 +5,7 @@ import { linodeConfigInterfaceFactory, linodeConfigInterfaceFactoryWithVPC, + regionFactory, } from '@linode/utilities'; import { authenticate } from 'support/api/authentication'; import { dcPricingMockLinodeTypes } from 'support/constants/dc-specific-pricing'; @@ -46,7 +47,6 @@ import { linodeFactory, linodeTypeFactory, profileFactory, - regionFactory, subnetFactory, vpcFactory, } from 'src/factories'; diff --git a/packages/manager/cypress/e2e/core/linodes/plan-selection.spec.ts b/packages/manager/cypress/e2e/core/linodes/plan-selection.spec.ts index f4c539c1afd..bad5a19b2ce 100644 --- a/packages/manager/cypress/e2e/core/linodes/plan-selection.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/plan-selection.spec.ts @@ -1,10 +1,6 @@ // TODO: Cypress -import { - accountFactory, - linodeTypeFactory, - regionAvailabilityFactory, - regionFactory, -} from '@src/factories'; +import { regionAvailabilityFactory, regionFactory } from '@linode/utilities'; +import { accountFactory, linodeTypeFactory } from '@src/factories'; import { authenticate } from 'support/api/authentication'; import { mockGetAccount } from 'support/intercepts/account'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; diff --git a/packages/manager/cypress/e2e/core/nodebalancers/smoke-create-nodebal.spec.ts b/packages/manager/cypress/e2e/core/nodebalancers/smoke-create-nodebal.spec.ts index 12471265c8d..690377d60cf 100644 --- a/packages/manager/cypress/e2e/core/nodebalancers/smoke-create-nodebal.spec.ts +++ b/packages/manager/cypress/e2e/core/nodebalancers/smoke-create-nodebal.spec.ts @@ -16,15 +16,12 @@ const deployNodeBalancer = () => { cy.get('[data-qa-deploy-nodebalancer]').click(); }; +import { regionFactory } from '@linode/utilities'; import { mockGetLinodes } from 'support/intercepts/linodes'; import { interceptCreateNodeBalancer } from 'support/intercepts/nodebalancers'; import { mockGetRegions } from 'support/intercepts/regions'; -import { - linodeFactory, - nodeBalancerFactory, - regionFactory, -} from 'src/factories'; +import { linodeFactory, nodeBalancerFactory } from 'src/factories'; const createNodeBalancerWithUI = ( nodeBal: NodeBalancer, diff --git a/packages/manager/cypress/e2e/core/objectStorage/enable-object-storage.spec.ts b/packages/manager/cypress/e2e/core/objectStorage/enable-object-storage.spec.ts index 78150cba226..78dd831ccd1 100644 --- a/packages/manager/cypress/e2e/core/objectStorage/enable-object-storage.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorage/enable-object-storage.spec.ts @@ -1,13 +1,13 @@ /** * @file Cypress integration tests for OBJ enrollment and cancellation. */ +import { regionFactory } from '@linode/utilities'; import { accountFactory, accountSettingsFactory, objectStorageClusterFactory, objectStorageKeyFactory, profileFactory, - regionFactory, } from '@src/factories'; import { mockGetAccount, @@ -17,10 +17,10 @@ import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { mockCancelObjectStorage, mockCreateAccessKey, + mockGetAccessKeys, mockGetBuckets, mockGetClusters, } from 'support/intercepts/object-storage'; -import { mockGetAccessKeys } from 'support/intercepts/object-storage'; import { mockGetProfile } from 'support/intercepts/profile'; import { mockGetRegions } from 'support/intercepts/regions'; import { ui } from 'support/ui'; diff --git a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts index 98265c7b772..596693bf153 100644 --- a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockGetAccount } from 'support/intercepts/account'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { @@ -19,7 +20,6 @@ import { accountFactory, objectStorageBucketFactoryGen2, objectStorageEndpointsFactory, - regionFactory, } from 'src/factories'; import { profileFactory } from 'src/factories/profile'; diff --git a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-details-gen2.spec.ts b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-details-gen2.spec.ts index 6ac187e0c66..ba58475cd86 100644 --- a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-details-gen2.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-details-gen2.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockGetAccount } from 'support/intercepts/account'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { @@ -10,7 +11,6 @@ import { accountFactory, objectStorageBucketFactoryGen2, objectStorageEndpointsFactory, - regionFactory, } from 'src/factories'; import type { ACLType, ObjectStorageEndpointTypes } from '@linode/api-v4'; diff --git a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-object-gen2.spec.ts b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-object-gen2.spec.ts index dd1feeda2b4..6d10cf1b60a 100644 --- a/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-object-gen2.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageGen2/bucket-object-gen2.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import 'cypress-file-upload'; import { mockGetAccount } from 'support/intercepts/account'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; @@ -22,7 +23,6 @@ import { accountFactory, objectStorageBucketFactoryGen2, objectStorageEndpointsFactory, - regionFactory, } from 'src/factories'; import type { ObjectStorageEndpoint } from '@linode/api-v4'; diff --git a/packages/manager/cypress/e2e/core/objectStorageMulticluster/access-keys-multicluster.spec.ts b/packages/manager/cypress/e2e/core/objectStorageMulticluster/access-keys-multicluster.spec.ts index df03e62632c..1b3db135ab7 100644 --- a/packages/manager/cypress/e2e/core/objectStorageMulticluster/access-keys-multicluster.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageMulticluster/access-keys-multicluster.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockGetAccount } from 'support/intercepts/account'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { @@ -21,7 +22,6 @@ import { accountFactory, objectStorageBucketFactory, objectStorageKeyFactory, - regionFactory, } from 'src/factories'; import type { ObjectStorageKeyBucketAccess } from '@linode/api-v4'; diff --git a/packages/manager/cypress/e2e/core/objectStorageMulticluster/bucket-create-multicluster.spec.ts b/packages/manager/cypress/e2e/core/objectStorageMulticluster/bucket-create-multicluster.spec.ts index a6ba75cd979..3c597b9def5 100644 --- a/packages/manager/cypress/e2e/core/objectStorageMulticluster/bucket-create-multicluster.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageMulticluster/bucket-create-multicluster.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockGetAccount } from 'support/intercepts/account'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { @@ -10,11 +11,7 @@ import { ui } from 'support/ui'; import { randomLabel, randomString } from 'support/util/random'; import { extendRegion } from 'support/util/regions'; -import { - accountFactory, - objectStorageBucketFactory, - regionFactory, -} from 'src/factories'; +import { accountFactory, objectStorageBucketFactory } from 'src/factories'; describe('Object Storage Multicluster Bucket create', () => { /* diff --git a/packages/manager/cypress/e2e/core/objectStorageMulticluster/bucket-details-multicluster.spec.ts b/packages/manager/cypress/e2e/core/objectStorageMulticluster/bucket-details-multicluster.spec.ts index d6769154a3a..253b54a4596 100644 --- a/packages/manager/cypress/e2e/core/objectStorageMulticluster/bucket-details-multicluster.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorageMulticluster/bucket-details-multicluster.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockGetAccount } from 'support/intercepts/account'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { mockGetBucket } from 'support/intercepts/object-storage'; @@ -5,11 +6,7 @@ import { mockGetRegions } from 'support/intercepts/regions'; import { ui } from 'support/ui'; import { randomLabel } from 'support/util/random'; -import { - accountFactory, - objectStorageBucketFactory, - regionFactory, -} from 'src/factories'; +import { accountFactory, objectStorageBucketFactory } from 'src/factories'; describe('Object Storage Multicluster Bucket Details Tabs', () => { beforeEach(() => { diff --git a/packages/manager/cypress/e2e/core/placementGroups/create-linode-with-placement-groups.spec.ts b/packages/manager/cypress/e2e/core/placementGroups/create-linode-with-placement-groups.spec.ts index 3acbd05ace0..dbc412e08d9 100644 --- a/packages/manager/cypress/e2e/core/placementGroups/create-linode-with-placement-groups.spec.ts +++ b/packages/manager/cypress/e2e/core/placementGroups/create-linode-with-placement-groups.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockGetAccount } from 'support/intercepts/account'; import { mockCreateLinode, @@ -18,7 +19,6 @@ import { linodeFactory, placementGroupFactory, } from 'src/factories'; -import { regionFactory } from 'src/factories'; import { CANNOT_CHANGE_PLACEMENT_GROUP_POLICY_MESSAGE } from 'src/features/PlacementGroups/constants'; const mockAccount = accountFactory.build(); diff --git a/packages/manager/cypress/e2e/core/placementGroups/create-placement-groups.spec.ts b/packages/manager/cypress/e2e/core/placementGroups/create-placement-groups.spec.ts index a56e60fe1e9..8a42a655912 100644 --- a/packages/manager/cypress/e2e/core/placementGroups/create-placement-groups.spec.ts +++ b/packages/manager/cypress/e2e/core/placementGroups/create-placement-groups.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockGetAccount } from 'support/intercepts/account'; import { mockCreatePlacementGroup, @@ -9,7 +10,6 @@ import { randomLabel, randomNumber } from 'support/util/random'; import { chooseRegion } from 'support/util/regions'; import { accountFactory, placementGroupFactory } from 'src/factories'; -import { regionFactory } from 'src/factories'; import { CANNOT_CHANGE_PLACEMENT_GROUP_POLICY_MESSAGE } from 'src/features/PlacementGroups/constants'; const mockAccount = accountFactory.build(); diff --git a/packages/manager/cypress/e2e/core/placementGroups/placement-groups-linode-assignment.spec.ts b/packages/manager/cypress/e2e/core/placementGroups/placement-groups-linode-assignment.spec.ts index 46c161c0882..6934266d06d 100644 --- a/packages/manager/cypress/e2e/core/placementGroups/placement-groups-linode-assignment.spec.ts +++ b/packages/manager/cypress/e2e/core/placementGroups/placement-groups-linode-assignment.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { mockGetAccount } from 'support/intercepts/account'; import { mockGetLinodeDetails, @@ -21,7 +22,6 @@ import { accountFactory, linodeFactory, placementGroupFactory, - regionFactory, } from 'src/factories'; import type { Linode } from '@linode/api-v4'; diff --git a/packages/manager/cypress/e2e/core/volumes/create-volume.spec.ts b/packages/manager/cypress/e2e/core/volumes/create-volume.spec.ts index 3fcdaad7eaf..49c42bebf4d 100644 --- a/packages/manager/cypress/e2e/core/volumes/create-volume.spec.ts +++ b/packages/manager/cypress/e2e/core/volumes/create-volume.spec.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { accountUserFactory, grantsFactory, @@ -5,8 +6,8 @@ import { } from '@src/factories'; import { authenticate } from 'support/api/authentication'; import { entityTag } from 'support/constants/cypress'; -import { mockGetUser } from 'support/intercepts/account'; import { mockGetAccount } from 'support/intercepts/account'; +import { mockGetUser } from 'support/intercepts/account'; import { mockAppendFeatureFlags } from 'support/intercepts/feature-flags'; import { mockGetLinodeDetails, @@ -28,7 +29,7 @@ import { createTestLinode } from 'support/util/linodes'; import { randomLabel, randomNumber, randomString } from 'support/util/random'; import { chooseRegion } from 'support/util/regions'; -import { accountFactory, regionFactory, volumeFactory } from 'src/factories'; +import { accountFactory, volumeFactory } from 'src/factories'; import { createLinodeRequestFactory, linodeFactory, diff --git a/packages/manager/cypress/e2e/core/vpc/vpc-create.spec.ts b/packages/manager/cypress/e2e/core/vpc/vpc-create.spec.ts index bfa81f820c7..dde410c921c 100644 --- a/packages/manager/cypress/e2e/core/vpc/vpc-create.spec.ts +++ b/packages/manager/cypress/e2e/core/vpc/vpc-create.spec.ts @@ -2,12 +2,8 @@ * @file Integration tests for VPC create flow. */ -import { - linodeFactory, - regionFactory, - subnetFactory, - vpcFactory, -} from '@src/factories'; +import { regionFactory } from '@linode/utilities'; +import { linodeFactory, subnetFactory, vpcFactory } from '@src/factories'; import { mockGetRegions } from 'support/intercepts/regions'; import { mockCreateVPC, diff --git a/packages/manager/cypress/support/util/regions.ts b/packages/manager/cypress/support/util/regions.ts index bda74ea62d3..26b80b4ace0 100644 --- a/packages/manager/cypress/support/util/regions.ts +++ b/packages/manager/cypress/support/util/regions.ts @@ -17,7 +17,7 @@ import type { Capabilities, Region } from '@linode/api-v4'; * the `apiLabel` property. * * @see {@link https://github.com/linode/manager/pull/10740|Cloud Manager PR #10740} - * @see {@link src/queries/regions/regions.ts} + * @see {@link packages/queries/src/regions/regions.ts (@linode/queries)} */ export interface ExtendedRegion extends Region { /** Region label as defined by API v4. */ diff --git a/packages/manager/src/components/ImageSelect/ImageOption.tsx b/packages/manager/src/components/ImageSelect/ImageOption.tsx index 7616ab5af15..87d920afd6d 100644 --- a/packages/manager/src/components/ImageSelect/ImageOption.tsx +++ b/packages/manager/src/components/ImageSelect/ImageOption.tsx @@ -1,22 +1,21 @@ -import { Stack, Tooltip, Typography } from '@linode/ui'; +import { ListItemOption, Stack, Tooltip, Typography } from '@linode/ui'; import React from 'react'; import CloudInitIcon from 'src/assets/icons/cloud-init.svg'; -import { ListItemOption } from 'src/components/ListItemOption'; import { useFlags } from 'src/hooks/useFlags'; import { OSIcon } from '../OSIcon'; import { isImageDeprecated } from './utilities'; import type { Image } from '@linode/api-v4'; -import type { ListItemProps } from 'src/components/ListItemOption'; +import type { ListItemOptionProps } from '@linode/ui'; export const ImageOption = ({ disabledOptions, item, props, selected, -}: ListItemProps) => { +}: ListItemOptionProps) => { const flags = useFlags(); return ( diff --git a/packages/manager/src/components/ImageSelect/utilities.ts b/packages/manager/src/components/ImageSelect/utilities.ts index dcb1babfb1e..e18797f7500 100644 --- a/packages/manager/src/components/ImageSelect/utilities.ts +++ b/packages/manager/src/components/ImageSelect/utilities.ts @@ -4,7 +4,7 @@ import { MAX_MONTHS_EOL_FILTER } from 'src/constants'; import type { ImageSelectVariant } from './ImageSelect'; import type { Image, RegionSite } from '@linode/api-v4'; -import type { DisableItemOption } from 'src/components/ListItemOption'; +import type { DisableItemOption } from '@linode/ui'; /** * Given a Image Select "variant", this PR returns an diff --git a/packages/manager/src/components/PlacementGroupsSelect/PlacementGroupSelectOption.tsx b/packages/manager/src/components/PlacementGroupsSelect/PlacementGroupSelectOption.tsx index 5e5904431ba..d7af0dac896 100644 --- a/packages/manager/src/components/PlacementGroupsSelect/PlacementGroupSelectOption.tsx +++ b/packages/manager/src/components/PlacementGroupsSelect/PlacementGroupSelectOption.tsx @@ -1,18 +1,16 @@ import { PLACEMENT_GROUP_TYPES } from '@linode/api-v4'; -import { Box, Stack } from '@linode/ui'; +import { Box, ListItemOption, Stack } from '@linode/ui'; import React from 'react'; -import { ListItemOption } from 'src/components/ListItemOption'; - import type { PlacementGroup } from '@linode/api-v4'; -import type { ListItemProps } from 'src/components/ListItemOption'; +import type { ListItemOptionProps } from '@linode/ui'; export const PlacementGroupSelectOption = ({ disabledOptions, item, props, selected, -}: ListItemProps) => ( +}: ListItemOptionProps) => ( { queryMocks.useAllPlacementGroupsQuery.mockReturnValue({ data: [ placementGroupFactory.build({ - placement_group_type: 'affinity:local', id: 1, is_compliant: true, - placement_group_policy: 'strict', label: 'my-placement-group', members: [ { @@ -78,6 +77,8 @@ describe('PlacementGroupSelect', () => { linode_id: 1, }, ], + placement_group_policy: 'strict', + placement_group_type: 'affinity:local', region: 'ca-central', }), ], diff --git a/packages/manager/src/components/RegionSelect/RegionMultiSelect.stories.tsx b/packages/manager/src/components/RegionSelect/RegionMultiSelect.stories.tsx index ab53a8c8db3..d92abe920fd 100644 --- a/packages/manager/src/components/RegionSelect/RegionMultiSelect.stories.tsx +++ b/packages/manager/src/components/RegionSelect/RegionMultiSelect.stories.tsx @@ -1,8 +1,8 @@ import { Box } from '@linode/ui'; -import { sortByString } from '@linode/utilities'; +import { regions, sortByString } from '@linode/utilities'; import React, { useState } from 'react'; -import { regions } from 'src/__data__/regionsData'; +// @todo: modularization - Move `SelectedRegionsList` to the `/data` directory in the `@linode/shared` package. import { SelectedRegionsList } from 'src/features/ObjectStorage/AccessKeyLanding/AccessKeyRegions/SelectedRegionsList'; import { RegionMultiSelect } from './RegionMultiSelect'; @@ -47,6 +47,7 @@ const meta: Meta = { currentCapability: 'Linodes', disabled: false, errorText: '', + flags: {}, isClearable: false, label: 'Regions', placeholder: 'Select Regions or type to search', diff --git a/packages/manager/src/components/RegionSelect/RegionMultiSelect.test.tsx b/packages/manager/src/components/RegionSelect/RegionMultiSelect.test.tsx index ea64ef5929b..4e209b68b40 100644 --- a/packages/manager/src/components/RegionSelect/RegionMultiSelect.test.tsx +++ b/packages/manager/src/components/RegionSelect/RegionMultiSelect.test.tsx @@ -1,12 +1,14 @@ -import { Region } from '@linode/api-v4'; +import { regionFactory } from '@linode/utilities'; import { fireEvent, screen } from '@testing-library/react'; import React from 'react'; -import { regionFactory } from 'src/factories/regions'; +// @todo: modularization - Replace 'testHelpers' with 'testHelpers' from the shared package once available. import { renderWithTheme } from 'src/utilities/testHelpers'; import { RegionMultiSelect } from './RegionMultiSelect'; +import type { Region } from '@linode/api-v4'; + const regionNewark = regionFactory.build({ id: 'us-east', label: 'Newark, NJ', @@ -42,6 +44,7 @@ describe('RegionMultiSelect', () => { renderWithTheme( { renderWithTheme( { renderWithTheme( { /> )} currentCapability="Block Storage" + flags={{}} onChange={mockHandleSelection} regions={[regionNewark, regionAtlanta]} selectedIds={[regionNewark.id]} @@ -108,7 +114,7 @@ describe('RegionMultiSelect', () => { // Open the dropdown fireEvent.click(screen.getByRole('button', { name: 'Open' })); - // Check Newark chip shows becaused it is selected + // Check Newark chip shows because it is selected expect( screen.getByRole('listitem', { name: 'Newark, NJ', diff --git a/packages/manager/src/components/RegionSelect/RegionMultiSelect.tsx b/packages/manager/src/components/RegionSelect/RegionMultiSelect.tsx index 1847f88c772..0c76b30cc9b 100644 --- a/packages/manager/src/components/RegionSelect/RegionMultiSelect.tsx +++ b/packages/manager/src/components/RegionSelect/RegionMultiSelect.tsx @@ -1,21 +1,25 @@ +import { useAllAccountAvailabilitiesQuery } from '@linode/queries'; import { Autocomplete, Chip, Stack, StyledListItem } from '@linode/ui'; import CloseIcon from '@mui/icons-material/Close'; import React from 'react'; -import { Flag } from 'src/components/Flag'; -import { useAllAccountAvailabilitiesQuery } from '@linode/queries'; +// @todo: modularization - Move `getRegionCountryGroup` utility to `@linode/shared` package +// as it imports GLOBAL_QUOTA_VALUE from RegionSelect's constants.ts and update the import. import { getRegionCountryGroup } from 'src/utilities/formatRegion'; +// @todo: modularization - Move `Flag` component to `@linode/shared` package. +import { Flag } from '../Flag'; import { RegionOption } from './RegionOption'; import { StyledAutocompleteContainer } from './RegionSelect.styles'; import { getRegionOptions, isRegionOptionUnavailable, + useIsGeckoEnabled, } from './RegionSelect.utils'; import type { RegionMultiSelectProps } from './RegionSelect.types'; import type { Region } from '@linode/api-v4'; -import type { DisableItemOption } from 'src/components/ListItemOption'; +import type { DisableItemOption } from '@linode/ui'; interface RegionChipLabelProps { region: Region; @@ -37,6 +41,7 @@ export const RegionMultiSelect = React.memo((props: RegionMultiSelectProps) => { disabled, disabledRegions: disabledRegionsFromProps, errorText, + flags, forcefullyShownRegionIds, helperText, ignoreAccountAvailability, @@ -62,6 +67,7 @@ export const RegionMultiSelect = React.memo((props: RegionMultiSelectProps) => { forcefullyShownRegionIds, regions, }); + const { isGeckoLAEnabled } = useIsGeckoEnabled(flags); const selectedRegions = regionOptions.filter((r) => selectedIds.includes(r.id) @@ -122,6 +128,7 @@ export const RegionMultiSelect = React.memo((props: RegionMultiSelectProps) => { return ( { + isGeckoLAEnabled: boolean; +} export const RegionOption = ({ disabledOptions, + isGeckoLAEnabled, item, props, selected, -}: ListItemProps) => { - const { isGeckoLAEnabled } = useIsGeckoEnabled(); - +}: RegionOptionProps) => { return ( = { currentCapability: undefined, disabled: false, errorText: '', + flags: {}, helperText: '', label: 'Region', regions, diff --git a/packages/manager/src/components/RegionSelect/RegionSelect.test.tsx b/packages/manager/src/components/RegionSelect/RegionSelect.test.tsx index 3f6721f2ac6..33b9ff82607 100644 --- a/packages/manager/src/components/RegionSelect/RegionSelect.test.tsx +++ b/packages/manager/src/components/RegionSelect/RegionSelect.test.tsx @@ -1,6 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import * as React from 'react'; -import { regionFactory } from 'src/factories'; +// @todo: modularization - Replace 'testHelpers' with 'testHelpers' from the shared package once available. import { renderWithTheme } from 'src/utilities/testHelpers'; import { RegionSelect } from './RegionSelect'; @@ -15,13 +16,14 @@ describe('RegionSelect', () => { currentCapability: 'Linodes', disabled: false, errorText: '', - onChange: vi.fn(), + flags: {}, helperText: '', label: '', + onChange: vi.fn(), regions, required: false, - value: '', tooltipText: '', + value: '', width: 100, }; diff --git a/packages/manager/src/components/RegionSelect/RegionSelect.tsx b/packages/manager/src/components/RegionSelect/RegionSelect.tsx index 4dce699e0e4..8591099cfd3 100644 --- a/packages/manager/src/components/RegionSelect/RegionSelect.tsx +++ b/packages/manager/src/components/RegionSelect/RegionSelect.tsx @@ -1,23 +1,26 @@ +import { useAllAccountAvailabilitiesQuery } from '@linode/queries'; import { Autocomplete } from '@linode/ui'; import PublicIcon from '@mui/icons-material/Public'; import { createFilterOptions } from '@mui/material/Autocomplete'; import * as React from 'react'; -import { Flag } from 'src/components/Flag'; -import { useIsGeckoEnabled } from 'src/components/RegionSelect/RegionSelect.utils'; -import { useAllAccountAvailabilitiesQuery } from '@linode/queries'; +// @todo: modularization - Move `getRegionCountryGroup` utility to `@linode/shared` package +// as it imports GLOBAL_QUOTA_VALUE from RegionSelect's constants.ts and update the import. import { getRegionCountryGroup } from 'src/utilities/formatRegion'; +// @todo: modularization - Move `Flag` component to `@linode/shared` package. +import { Flag } from '../Flag'; import { RegionOption } from './RegionOption'; import { StyledAutocompleteContainer } from './RegionSelect.styles'; import { getRegionOptions, isRegionOptionUnavailable, + useIsGeckoEnabled, } from './RegionSelect.utils'; import type { RegionSelectProps } from './RegionSelect.types'; import type { Region } from '@linode/api-v4'; -import type { DisableItemOption } from 'src/components/ListItemOption'; +import type { DisableItemOption } from '@linode/ui'; /** * A specific select for regions. @@ -39,6 +42,7 @@ export const RegionSelect = < disabled, disabledRegions: disabledRegionsFromProps, errorText, + flags, forcefullyShownRegionIds, helperText, ignoreAccountAvailability, @@ -55,8 +59,7 @@ export const RegionSelect = < width, } = props; - const { isGeckoLAEnabled } = useIsGeckoEnabled(); - + const { isGeckoLAEnabled } = useIsGeckoEnabled(flags); const { data: accountAvailability, isLoading: accountAvailabilityLoading, @@ -117,6 +120,7 @@ export const RegionSelect = < return ( ; + /** + * Feature Flags + */ + flags: FlagSet; /** * Used to override filtering done by the `currentCapability` prop * @todo Remove this after Object Storage Gen2. @@ -78,6 +83,10 @@ export interface RegionMultiSelectProps }>; currentCapability: Capabilities | undefined; disabledRegions?: Record; + /** + * Feature Flags + */ + flags: FlagSet; /** * Used to override filtering done by the `currentCapability` prop * @todo Remove this after Object Storage Gen2. diff --git a/packages/manager/src/components/RegionSelect/RegionSelect.utils.test.tsx b/packages/manager/src/components/RegionSelect/RegionSelect.utils.test.tsx index 1681e0bb59b..e371deb03f1 100644 --- a/packages/manager/src/components/RegionSelect/RegionSelect.utils.test.tsx +++ b/packages/manager/src/components/RegionSelect/RegionSelect.utils.test.tsx @@ -1,4 +1,4 @@ -import { accountAvailabilityFactory, regionFactory } from 'src/factories'; +import { accountAvailabilityFactory, regionFactory } from '@linode/utilities'; import { getRegionOptions, diff --git a/packages/manager/src/components/RegionSelect/RegionSelect.utils.tsx b/packages/manager/src/components/RegionSelect/RegionSelect.utils.tsx index 9fea41ec64d..460c6a453e9 100644 --- a/packages/manager/src/components/RegionSelect/RegionSelect.utils.tsx +++ b/packages/manager/src/components/RegionSelect/RegionSelect.utils.tsx @@ -1,7 +1,8 @@ import { CONTINENT_CODE_TO_CONTINENT } from '@linode/api-v4'; - -import { useFlags } from 'src/hooks/useFlags'; import { useRegionsQuery } from '@linode/queries'; + +// @todo: modularization - Move `getRegionCountryGroup` utility to `@linode/shared` package +// as it imports GLOBAL_QUOTA_VALUE from RegionSelect's constants.ts and update the import. import { getRegionCountryGroup } from 'src/utilities/formatRegion'; import type { @@ -9,7 +10,9 @@ import type { RegionFilterValue, } from './RegionSelect.types'; import type { AccountAvailability, Capabilities, Region } from '@linode/api-v4'; -import type { LinodeCreateType } from 'src/features/Linodes/LinodeCreate/types'; +import type { LinodeCreateType } from '@linode/utilities'; +// @todo: modularization - Update type FlagSet to import from `@linode/shared` package once available. +import type { FlagSet } from 'src/featureFlags'; const NORTH_AMERICA = CONTINENT_CODE_TO_CONTINENT.NA; @@ -164,17 +167,19 @@ export const getIsDistributedRegion = ( return region?.site_type === 'distributed'; }; -export const useIsGeckoEnabled = () => { - const flags = useFlags(); - const isGeckoLA = flags?.gecko2?.enabled && flags.gecko2.la; - const isGeckoBeta = flags.gecko2?.enabled && !flags.gecko2?.la; +export const useIsGeckoEnabled = (flags: FlagSet) => { const { data: regions } = useRegionsQuery(); + const isGeckoLA = flags?.gecko2?.enabled && flags.gecko2.la; + const isGeckoBeta = flags?.gecko2?.enabled && !flags.gecko2?.la; + const hasDistributedRegionCapability = regions?.some((region: Region) => region.capabilities.includes('Distributed Plans') ); - const isGeckoLAEnabled = hasDistributedRegionCapability && isGeckoLA; - const isGeckoBetaEnabled = hasDistributedRegionCapability && isGeckoBeta; + const isGeckoLAEnabled = Boolean(hasDistributedRegionCapability && isGeckoLA); + const isGeckoBetaEnabled = Boolean( + hasDistributedRegionCapability && isGeckoBeta + ); return { isGeckoBetaEnabled, isGeckoLAEnabled }; }; diff --git a/packages/manager/src/components/TransferDisplay/TransferDisplayDialog.test.tsx b/packages/manager/src/components/TransferDisplay/TransferDisplayDialog.test.tsx index 1c82bc0abe2..bc0254826fd 100644 --- a/packages/manager/src/components/TransferDisplay/TransferDisplayDialog.test.tsx +++ b/packages/manager/src/components/TransferDisplay/TransferDisplayDialog.test.tsx @@ -1,7 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import { fireEvent } from '@testing-library/react'; import React from 'react'; -import { regionFactory } from 'src/factories'; import { accountTransferFactory, accountTransferNoResourceFactory, diff --git a/packages/manager/src/components/TransferDisplay/TransferDisplayDialog.tsx b/packages/manager/src/components/TransferDisplay/TransferDisplayDialog.tsx index d99221a5f9a..ee32a0ba7e2 100644 --- a/packages/manager/src/components/TransferDisplay/TransferDisplayDialog.tsx +++ b/packages/manager/src/components/TransferDisplay/TransferDisplayDialog.tsx @@ -1,9 +1,10 @@ import { Box, Dialog, Divider, Typography } from '@linode/ui'; -import { styled } from '@mui/material/styles'; import { useTheme } from '@mui/material/styles'; +import { styled } from '@mui/material/styles'; import * as React from 'react'; import { Link } from 'src/components/Link'; +import { useFlags } from 'src/hooks/useFlags'; import { useIsGeckoEnabled } from '../RegionSelect/RegionSelect.utils'; import { NETWORK_TRANSFER_USAGE_AND_COST_LINK } from './constants'; @@ -36,7 +37,8 @@ export const TransferDisplayDialog = React.memo( regionTransferPools, } = props; const theme = useTheme(); - const { isGeckoLAEnabled } = useIsGeckoEnabled(); + const flags = useFlags(); + const { isGeckoLAEnabled } = useIsGeckoEnabled(flags); const daysRemainingInMonth = getDaysRemaining(); const listOfOtherRegionTransferPools: string[] = diff --git a/packages/manager/src/components/TransferDisplay/utils.test.tsx b/packages/manager/src/components/TransferDisplay/utils.test.tsx index bd91d7a1ba4..61d5e8b1cce 100644 --- a/packages/manager/src/components/TransferDisplay/utils.test.tsx +++ b/packages/manager/src/components/TransferDisplay/utils.test.tsx @@ -1,8 +1,9 @@ -import { accountTransferFactory } from 'src/factories/account'; import { regionFactory, regionWithDynamicPricingFactory, -} from 'src/factories/regions'; +} from '@linode/utilities'; + +import { accountTransferFactory } from 'src/factories/account'; import { calculatePoolUsagePct, diff --git a/packages/manager/src/factories/index.ts b/packages/manager/src/factories/index.ts index ccfc6cc35e8..5698c3f11fe 100644 --- a/packages/manager/src/factories/index.ts +++ b/packages/manager/src/factories/index.ts @@ -1,6 +1,5 @@ export * from './account'; export * from './accountAgreements'; -export * from './accountAvailability'; export * from './accountLogin'; export * from './accountMaintenance'; export * from './accountOAuth'; @@ -39,7 +38,6 @@ export * from './placementGroups'; export * from './preferences'; export * from './profile'; export * from './promotionalOffer'; -export * from './regions'; export * from './stackscripts'; export * from './statusPage'; export * from './subnets'; diff --git a/packages/manager/src/features/Account/Quotas/Quotas.test.tsx b/packages/manager/src/features/Account/Quotas/Quotas.test.tsx index df347dfd92d..d90cef86c43 100644 --- a/packages/manager/src/features/Account/Quotas/Quotas.test.tsx +++ b/packages/manager/src/features/Account/Quotas/Quotas.test.tsx @@ -1,9 +1,9 @@ +import { regionFactory } from '@linode/utilities'; import { QueryClient } from '@tanstack/react-query'; import { screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; -import { regionFactory } from 'src/factories'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { Quotas } from './Quotas'; diff --git a/packages/manager/src/features/Account/Quotas/Quotas.tsx b/packages/manager/src/features/Account/Quotas/Quotas.tsx index 60089bd7eba..91fd9fd6489 100644 --- a/packages/manager/src/features/Account/Quotas/Quotas.tsx +++ b/packages/manager/src/features/Account/Quotas/Quotas.tsx @@ -6,6 +6,7 @@ import { useHistory } from 'react-router-dom'; import { DocsLink } from 'src/components/DocsLink/DocsLink'; import { DocumentTitleSegment } from 'src/components/DocumentTitle'; import { RegionSelect } from 'src/components/RegionSelect/RegionSelect'; +import { useFlags } from 'src/hooks/useFlags'; import { QuotasTable } from './QuotasTable'; import { useGetLocationsForQuotaService } from './utils'; @@ -15,6 +16,7 @@ import type { SelectOption } from '@linode/ui'; import type { Theme } from '@mui/material'; export const Quotas = () => { + const flags = useFlags(); const history = useHistory(); const [selectedService, setSelectedService] = React.useState< SelectOption @@ -110,6 +112,7 @@ export const Quotas = () => { currentCapability={undefined} disableClearable disabled={isFetchingLocations} + flags={flags} loading={isFetchingLocations} noOptionsText={`No resource found for ${selectedService.label}`} regions={regions ?? []} diff --git a/packages/manager/src/features/Billing/PdfGenerator/PdfGenerator.test.ts b/packages/manager/src/features/Billing/PdfGenerator/PdfGenerator.test.ts index ce429358e8d..4bb008048f8 100644 --- a/packages/manager/src/features/Billing/PdfGenerator/PdfGenerator.test.ts +++ b/packages/manager/src/features/Billing/PdfGenerator/PdfGenerator.test.ts @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import fs from 'fs'; import { PdfReader } from 'pdfreader'; @@ -6,7 +7,6 @@ import { invoiceFactory, invoiceItemFactory, paymentFactory, - regionFactory, } from 'src/factories'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { formatDate } from 'src/utilities/formatDate'; diff --git a/packages/manager/src/features/Billing/PdfGenerator/utils.test.ts b/packages/manager/src/features/Billing/PdfGenerator/utils.test.ts index c69336a539b..943f8580518 100644 --- a/packages/manager/src/features/Billing/PdfGenerator/utils.test.ts +++ b/packages/manager/src/features/Billing/PdfGenerator/utils.test.ts @@ -1,11 +1,13 @@ -import { invoiceItemFactory, regionFactory } from 'src/factories'; +import { regionFactory } from '@linode/utilities'; + +import { ADDRESSES } from 'src/constants'; +import { invoiceItemFactory } from 'src/factories'; import { getInvoiceRegion, getRemitAddress, invoiceCreatedAfterDCPricingLaunch, } from './utils'; -import { ADDRESSES } from 'src/constants'; describe('getInvoiceRegion', () => { it('should get a formatted label given invoice items and regions', () => { diff --git a/packages/manager/src/features/CloudPulse/Alerts/AlertsDetail/AlertDetail.test.tsx b/packages/manager/src/features/CloudPulse/Alerts/AlertsDetail/AlertDetail.test.tsx index e99ca26e930..02762f651e2 100644 --- a/packages/manager/src/features/CloudPulse/Alerts/AlertsDetail/AlertDetail.test.tsx +++ b/packages/manager/src/features/CloudPulse/Alerts/AlertsDetail/AlertDetail.test.tsx @@ -1,10 +1,10 @@ +import { regionFactory } from '@linode/utilities'; import React from 'react'; import { alertFactory, linodeFactory, notificationChannelFactory, - regionFactory, serviceTypesFactory, } from 'src/factories/'; import { renderWithTheme } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsRegionFilter.test.tsx b/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsRegionFilter.test.tsx index 34651adcc73..9532552fe2e 100644 --- a/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsRegionFilter.test.tsx +++ b/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsRegionFilter.test.tsx @@ -1,7 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import { regionFactory } from 'src/factories'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { AlertsRegionFilter } from './AlertsRegionFilter'; diff --git a/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsRegionFilter.tsx b/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsRegionFilter.tsx index f200dfb19ad..0a299e513ba 100644 --- a/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsRegionFilter.tsx +++ b/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsRegionFilter.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { RegionMultiSelect } from 'src/components/RegionSelect/RegionMultiSelect'; +import { useFlags } from 'src/hooks/useFlags'; import type { Region } from '@linode/api-v4'; @@ -19,6 +20,7 @@ export const AlertsRegionFilter = React.memo((props: AlertsRegionProps) => { const { handleSelectionChange, regionOptions } = props; const [selectedRegion, setSelectedRegion] = React.useState([]); + const flags = useFlags(); const handleRegionChange = React.useCallback( (regionIds: string[]) => { @@ -46,6 +48,7 @@ export const AlertsRegionFilter = React.memo((props: AlertsRegionProps) => { }} currentCapability={undefined} // this is a required property, no specific capability required here disableSelectAll + flags={flags} isClearable label="Select Regions" limitTags={1} diff --git a/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsResources.test.tsx b/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsResources.test.tsx index 1e59a95f23f..418605f6657 100644 --- a/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsResources.test.tsx +++ b/packages/manager/src/features/CloudPulse/Alerts/AlertsResources/AlertsResources.test.tsx @@ -1,8 +1,9 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; -import { linodeFactory, regionFactory } from 'src/factories'; +import { linodeFactory } from 'src/factories'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { AlertResources } from './AlertsResources'; @@ -192,7 +193,7 @@ describe('AlertResources component tests', () => { it('should handle selection correctly and publish', async () => { const handleResourcesSelection = vi.fn(); - const { getByTestId, queryByTestId, getByText } = renderWithTheme( + const { getByTestId, getByText, queryByTestId } = renderWithTheme( { const { name } = props; const { data: regions, isError, isLoading } = useRegionsQuery(); const { control } = useFormContext(); + const flags = useFlags(); + return ( ( @@ -30,6 +33,7 @@ export const CloudPulseRegionSelect = (props: CloudViewRegionSelectProps) => { field.onChange(value?.id); }} currentCapability={undefined} + flags={flags} fullWidth label="Region" loading={isLoading} diff --git a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Resources/CloudPulseModifyAlertResources.test.tsx b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Resources/CloudPulseModifyAlertResources.test.tsx index d7d2fcb985b..f6f2dc56d63 100644 --- a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Resources/CloudPulseModifyAlertResources.test.tsx +++ b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Resources/CloudPulseModifyAlertResources.test.tsx @@ -1,7 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import { alertFactory, linodeFactory, regionFactory } from 'src/factories'; +import { alertFactory, linodeFactory } from 'src/factories'; import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers'; import { CloudPulseModifyAlertResources } from './CloudPulseModifyAlertResources'; diff --git a/packages/manager/src/features/CloudPulse/Alerts/EditAlert/EditAlertResources.test.tsx b/packages/manager/src/features/CloudPulse/Alerts/EditAlert/EditAlertResources.test.tsx index 90e884ead4c..318826ca7bc 100644 --- a/packages/manager/src/features/CloudPulse/Alerts/EditAlert/EditAlertResources.test.tsx +++ b/packages/manager/src/features/CloudPulse/Alerts/EditAlert/EditAlertResources.test.tsx @@ -1,10 +1,11 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { createMemoryHistory } from 'history'; import React from 'react'; import { Router } from 'react-router-dom'; -import { alertFactory, linodeFactory, regionFactory } from 'src/factories'; +import { alertFactory, linodeFactory } from 'src/factories'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { EditAlertResources } from './EditAlertResources'; diff --git a/packages/manager/src/features/CloudPulse/Alerts/Utils/AlertResourceUtils.test.ts b/packages/manager/src/features/CloudPulse/Alerts/Utils/AlertResourceUtils.test.ts index 4d286c25d4f..b166d62d038 100644 --- a/packages/manager/src/features/CloudPulse/Alerts/Utils/AlertResourceUtils.test.ts +++ b/packages/manager/src/features/CloudPulse/Alerts/Utils/AlertResourceUtils.test.ts @@ -1,4 +1,4 @@ -import { regionFactory } from 'src/factories'; +import { regionFactory } from '@linode/utilities'; import { getFilteredResources, diff --git a/packages/manager/src/features/CloudPulse/shared/CloudPulseRegionSelect.test.tsx b/packages/manager/src/features/CloudPulse/shared/CloudPulseRegionSelect.test.tsx index c087921ed8e..569504a2859 100644 --- a/packages/manager/src/features/CloudPulse/shared/CloudPulseRegionSelect.test.tsx +++ b/packages/manager/src/features/CloudPulse/shared/CloudPulseRegionSelect.test.tsx @@ -1,7 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; -import { dashboardFactory, regionFactory } from 'src/factories'; +import { dashboardFactory } from 'src/factories'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { DBAAS_CAPABILITY, LINODE_CAPABILITY } from '../Utils/FilterConfig'; diff --git a/packages/manager/src/features/CloudPulse/shared/CloudPulseRegionSelect.tsx b/packages/manager/src/features/CloudPulse/shared/CloudPulseRegionSelect.tsx index 41171287355..669c2e45f62 100644 --- a/packages/manager/src/features/CloudPulse/shared/CloudPulseRegionSelect.tsx +++ b/packages/manager/src/features/CloudPulse/shared/CloudPulseRegionSelect.tsx @@ -1,8 +1,8 @@ +import { useRegionsQuery } from '@linode/queries'; import * as React from 'react'; import { RegionSelect } from 'src/components/RegionSelect/RegionSelect'; import { useFlags } from 'src/hooks/useFlags'; -import { useRegionsQuery } from '@linode/queries'; import { FILTER_CONFIG } from '../Utils/FilterConfig'; @@ -24,10 +24,6 @@ export interface CloudPulseRegionSelectProps { export const CloudPulseRegionSelect = React.memo( (props: CloudPulseRegionSelectProps) => { - const { data: regions, isError, isLoading } = useRegionsQuery(); - - const flags = useFlags(); - const { defaultValue, handleRegionChange, @@ -37,6 +33,10 @@ export const CloudPulseRegionSelect = React.memo( selectedDashboard, } = props; + const { data: regions, isError, isLoading } = useRegionsQuery(); + + const flags = useFlags(); + const serviceType: string | undefined = selectedDashboard?.service_type; const capability = serviceType ? FILTER_CONFIG.get(serviceType)?.capability @@ -93,6 +93,7 @@ export const CloudPulseRegionSelect = React.memo( disableClearable={false} disabled={!selectedDashboard || !regions} errorText={isError ? `Failed to fetch ${label || 'Regions'}.` : ''} + flags={flags} fullWidth label={label || 'Region'} loading={isLoading} diff --git a/packages/manager/src/features/Databases/DatabaseCreate/DatabaseClusterData.tsx b/packages/manager/src/features/Databases/DatabaseCreate/DatabaseClusterData.tsx index 000292b902e..4f251e3adde 100644 --- a/packages/manager/src/features/Databases/DatabaseCreate/DatabaseClusterData.tsx +++ b/packages/manager/src/features/Databases/DatabaseCreate/DatabaseClusterData.tsx @@ -9,6 +9,7 @@ import { StyledTextField, } from 'src/features/Databases/DatabaseCreate/DatabaseCreate.style'; import { DatabaseEngineSelect } from 'src/features/Databases/DatabaseCreate/DatabaseEngineSelect'; +import { useFlags } from 'src/hooks/useFlags'; import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck'; import type { @@ -51,6 +52,7 @@ export const DatabaseClusterData = (props: Props) => { const isRestricted = useRestrictedGlobalGrantCheck({ globalGrantType: 'add_databases', }); + const flags = useFlags(); const labelToolTip = ( @@ -93,6 +95,7 @@ export const DatabaseClusterData = (props: Props) => { disableClearable disabled={isRestricted} errorText={errors.region} + flags={flags} onChange={(e, region) => onChange('region', region.id)} regions={regionsData} value={values.region} diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseSummary/DatabaseSummaryClusterConfiguration.test.tsx b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseSummary/DatabaseSummaryClusterConfiguration.test.tsx index 454abcdbfb2..a27429a7f47 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseSummary/DatabaseSummaryClusterConfiguration.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseSummary/DatabaseSummaryClusterConfiguration.test.tsx @@ -1,8 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import React from 'react'; import { databaseFactory, databaseTypeFactory } from 'src/factories/databases'; -import { regionFactory } from 'src/factories/regions'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { DatabaseSummaryClusterConfiguration } from './DatabaseSummaryClusterConfiguration'; diff --git a/packages/manager/src/features/GlobalNotifications/RegionStatusBanner.test.tsx b/packages/manager/src/features/GlobalNotifications/RegionStatusBanner.test.tsx index 48d3b49d19f..07a55e4ff1a 100644 --- a/packages/manager/src/features/GlobalNotifications/RegionStatusBanner.test.tsx +++ b/packages/manager/src/features/GlobalNotifications/RegionStatusBanner.test.tsx @@ -1,9 +1,9 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import * as React from 'react'; -import { regionFactory } from 'src/factories/regions'; import { makeResourcePage } from 'src/mocks/serverHandlers'; -import { http, HttpResponse, server } from 'src/mocks/testServer'; +import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { RegionStatusBanner } from './RegionStatusBanner'; diff --git a/packages/manager/src/features/Images/ImagesCreate/CreateImageTab.test.tsx b/packages/manager/src/features/Images/ImagesCreate/CreateImageTab.test.tsx index 5c67f4c31c0..454d63aa156 100644 --- a/packages/manager/src/features/Images/ImagesCreate/CreateImageTab.test.tsx +++ b/packages/manager/src/features/Images/ImagesCreate/CreateImageTab.test.tsx @@ -1,13 +1,9 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import { userEvent } from '@testing-library/user-event'; import React from 'react'; -import { - imageFactory, - linodeDiskFactory, - linodeFactory, - regionFactory, -} from 'src/factories'; +import { imageFactory, linodeDiskFactory, linodeFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithThemeAndRouter } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Images/ImagesCreate/ImageUpload.tsx b/packages/manager/src/features/Images/ImagesCreate/ImageUpload.tsx index 46a2794842b..16ce637bad0 100644 --- a/packages/manager/src/features/Images/ImagesCreate/ImageUpload.tsx +++ b/packages/manager/src/features/Images/ImagesCreate/ImageUpload.tsx @@ -267,6 +267,7 @@ export const ImageUpload = () => { currentCapability="Object Storage" // Images use Object Storage as their storage backend disableClearable errorText={fieldState.error?.message} + flags={flags} ignoreAccountAvailability label="Region" onChange={(e, region) => field.onChange(region.id)} diff --git a/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ImageRegionRow.test.tsx b/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ImageRegionRow.test.tsx index da58325b963..21c0167d16f 100644 --- a/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ImageRegionRow.test.tsx +++ b/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ImageRegionRow.test.tsx @@ -1,7 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import { regionFactory } from 'src/factories/regions'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithTheme } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ManageImageRegionsForm.test.tsx b/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ManageImageRegionsForm.test.tsx index 0d6f2124885..0a87e5d6899 100644 --- a/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ManageImageRegionsForm.test.tsx +++ b/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ManageImageRegionsForm.test.tsx @@ -1,7 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import { imageFactory, regionFactory } from 'src/factories'; +import { imageFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithTheme } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ManageImageRegionsForm.tsx b/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ManageImageRegionsForm.tsx index 383d14dfdda..ff886d5fbe5 100644 --- a/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ManageImageRegionsForm.tsx +++ b/packages/manager/src/features/Images/ImagesLanding/ImageRegions/ManageImageRegionsForm.tsx @@ -1,3 +1,4 @@ +import { useRegionsQuery } from '@linode/queries'; import { ActionsPanel, Notice, Paper, Stack, Typography } from '@linode/ui'; import { useSnackbar } from 'notistack'; import React from 'react'; @@ -5,8 +6,8 @@ import { useForm } from 'react-hook-form'; import { Link } from 'src/components/Link'; import { RegionMultiSelect } from 'src/components/RegionSelect/RegionMultiSelect'; +import { useFlags } from 'src/hooks/useFlags'; import { useUpdateImageRegionsMutation } from 'src/queries/images'; -import { useRegionsQuery } from '@linode/queries'; import { ImageRegionRow } from './ImageRegionRow'; @@ -16,8 +17,8 @@ import type { Region, UpdateImageRegionsPayload, } from '@linode/api-v4'; +import type { DisableItemOption } from '@linode/ui'; import type { Resolver } from 'react-hook-form'; -import type { DisableItemOption } from 'src/components/ListItemOption'; interface Props { image: Image | undefined; @@ -31,6 +32,8 @@ interface Context { export const ManageImageReplicasForm = (props: Props) => { const { image, onClose } = props; + const flags = useFlags(); + const imageRegionIds = image?.regions.map(({ region }) => region) ?? []; const { enqueueSnackbar } = useSnackbar(); @@ -115,6 +118,7 @@ export const ManageImageReplicasForm = (props: Props) => { currentCapability="Object Storage" // Images use Object Storage as the storage backend disabledRegions={disabledRegions} errorText={errors.regions?.message} + flags={flags} ignoreAccountAvailability // Ignore the account capability because we are just using "Object Storage" for region compatibility label="Add Regions" placeholder="Select regions or type to search" diff --git a/packages/manager/src/features/Kubernetes/ClusterList/KubernetesClusterRow.test.tsx b/packages/manager/src/features/Kubernetes/ClusterList/KubernetesClusterRow.test.tsx index d8ba2d4ea45..a79bcc91d48 100644 --- a/packages/manager/src/features/Kubernetes/ClusterList/KubernetesClusterRow.test.tsx +++ b/packages/manager/src/features/Kubernetes/ClusterList/KubernetesClusterRow.test.tsx @@ -1,7 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import { render } from '@testing-library/react'; import * as React from 'react'; -import { kubernetesClusterFactory, regionFactory } from 'src/factories'; +import { kubernetesClusterFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { wrapWithTableBody, wrapWithTheme } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Kubernetes/CreateCluster/CreateCluster.tsx b/packages/manager/src/features/Kubernetes/CreateCluster/CreateCluster.tsx index 3fbb9cc1bd2..5a977a5e4d3 100644 --- a/packages/manager/src/features/Kubernetes/CreateCluster/CreateCluster.tsx +++ b/packages/manager/src/features/Kubernetes/CreateCluster/CreateCluster.tsx @@ -36,6 +36,7 @@ import { useIsLkeEnterpriseEnabled, useLkeStandardOrEnterpriseVersions, } from 'src/features/Kubernetes/kubeUtils'; +import { useFlags } from 'src/hooks/useFlags'; import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck'; import { useCreateKubernetesClusterBetaMutation, @@ -78,6 +79,7 @@ import type { APIError } from '@linode/api-v4/lib/types'; import type { ExtendedIP } from 'src/utilities/ipUtils'; export const CreateCluster = () => { + const flags = useFlags(); const { classes } = useStyles(); const [selectedRegion, setSelectedRegion] = React.useState< Region | undefined @@ -430,6 +432,7 @@ export const CreateCluster = () => { disableClearable disabled={isCreateClusterRestricted} errorText={errorMap.region} + flags={flags} onChange={(e, region) => setSelectedRegion(region)} regions={regionsData} value={selectedRegion?.id} diff --git a/packages/manager/src/features/Kubernetes/KubeCheckoutBar/KubeCheckoutBar.test.tsx b/packages/manager/src/features/Kubernetes/KubeCheckoutBar/KubeCheckoutBar.test.tsx index 632b192b026..c8907f87587 100644 --- a/packages/manager/src/features/Kubernetes/KubeCheckoutBar/KubeCheckoutBar.test.tsx +++ b/packages/manager/src/features/Kubernetes/KubeCheckoutBar/KubeCheckoutBar.test.tsx @@ -1,6 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import * as React from 'react'; -import { regionFactory, typeFactory } from 'src/factories'; +import { typeFactory } from 'src/factories'; import { nodePoolFactory } from 'src/factories/kubernetesCluster'; import { UNKNOWN_PRICE } from 'src/utilities/pricing/constants'; import { LKE_CREATE_CLUSTER_CHECKOUT_MESSAGE } from 'src/utilities/pricing/constants'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx index 2199037af5e..b7a738f560f 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx @@ -1,6 +1,6 @@ +import { regionFactory } from '@linode/utilities'; import React from 'react'; -import { regionFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Backups.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Backups.test.tsx index 227568b9ce6..537aa716d70 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Backups.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Backups.test.tsx @@ -1,11 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import React from 'react'; -import { - accountSettingsFactory, - profileFactory, - regionFactory, -} from 'src/factories'; +import { accountSettingsFactory, profileFactory } from 'src/factories'; import { grantsFactory } from 'src/factories/grants'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.test.tsx index 9f5ba35f0c9..a57756aee8a 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.test.tsx @@ -1,7 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import React from 'react'; -import { profileFactory, regionFactory } from 'src/factories'; +import { profileFactory } from 'src/factories'; import { grantsFactory } from 'src/factories/grants'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Details/PlacementGroupPanel.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Details/PlacementGroupPanel.test.tsx index db7616cbed8..bd499104896 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Details/PlacementGroupPanel.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Details/PlacementGroupPanel.test.tsx @@ -1,6 +1,6 @@ +import { regionFactory } from '@linode/utilities'; import React from 'react'; -import { regionFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/EUAgreement.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/EUAgreement.test.tsx index fd4f89a0519..a9d01a7bc80 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/EUAgreement.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/EUAgreement.test.tsx @@ -1,6 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import React from 'react'; -import { accountAgreementsFactory, regionFactory } from 'src/factories'; +import { accountAgreementsFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Region.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Region.test.tsx index bb30f57896b..1aaabaef4bb 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Region.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Region.test.tsx @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import { userEvent } from '@testing-library/user-event'; import React from 'react'; @@ -8,7 +9,6 @@ import { linodeFactory, linodeTypeFactory, profileFactory, - regionFactory, } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx index 0521039ed22..6a850a93e94 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx @@ -83,7 +83,7 @@ export const Region = React.memo(() => { const { data: regions } = useRegionsQuery(); - const { isGeckoLAEnabled } = useIsGeckoEnabled(); + const { isGeckoLAEnabled } = useIsGeckoEnabled(flags); const showTwoStepRegion = isGeckoLAEnabled && isDistributedRegionSupported(params.type ?? 'OS'); @@ -252,6 +252,7 @@ export const Region = React.memo(() => { disabled={isLinodeCreateRestricted} disabledRegions={disabledRegions} errorText={fieldState.error?.message} + flags={flags} onChange={(e, region) => onChange(region)} regions={regions ?? []} textFieldProps={{ onBlur: field.onBlur }} diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.test.ts b/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.test.ts index cfc1ef5db54..bd7c8e36fc7 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.test.ts +++ b/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.test.ts @@ -1,4 +1,6 @@ -import { imageFactory, regionFactory } from 'src/factories'; +import { regionFactory } from '@linode/utilities'; + +import { imageFactory } from 'src/factories'; import { getDisabledRegions } from './Region.utils'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.ts b/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.ts index 52bbf1b35d9..af7c2cca5cd 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.ts +++ b/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.ts @@ -1,5 +1,5 @@ import type { Image, Region } from '@linode/api-v4'; -import type { DisableItemOption } from 'src/components/ListItemOption'; +import type { DisableItemOption } from '@linode/ui'; interface DisabledRegionOptions { regions: Region[]; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Security.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Security.test.tsx index 988f665f38b..3938483b0cc 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Security.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Security.test.tsx @@ -1,12 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import React from 'react'; -import { - accountFactory, - profileFactory, - regionFactory, - sshKeyFactory, -} from 'src/factories'; +import { accountFactory, profileFactory, sshKeyFactory } from 'src/factories'; import { grantsFactory } from 'src/factories/grants'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Summary/Summary.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Summary/Summary.test.tsx index 156dad3ed8d..3a1136ac010 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Summary/Summary.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Summary/Summary.test.tsx @@ -1,6 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import React from 'react'; -import { imageFactory, regionFactory, typeFactory } from 'src/factories'; +import { imageFactory, typeFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/TwoStepRegion.tsx b/packages/manager/src/features/Linodes/LinodeCreate/TwoStepRegion.tsx index 496821cb342..d0ba308fd6f 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/TwoStepRegion.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/TwoStepRegion.tsx @@ -1,3 +1,4 @@ +import { useRegionsQuery } from '@linode/queries'; import { Autocomplete, Box, Paper, Typography } from '@linode/ui'; import * as React from 'react'; @@ -9,7 +10,7 @@ import { Tab } from 'src/components/Tabs/Tab'; import { TabList } from 'src/components/Tabs/TabList'; import { TabPanels } from 'src/components/Tabs/TabPanels'; import { Tabs } from 'src/components/Tabs/Tabs'; -import { useRegionsQuery } from '@linode/queries'; +import { useFlags } from 'src/hooks/useFlags'; import { sendLinodeCreateDocsEvent } from 'src/utilities/analytics/customEventAnalytics'; import { sendLinodeCreateFormInputEvent } from 'src/utilities/analytics/formEventAnalytics'; import { DOCS_LINK_LABEL_DC_PRICING } from 'src/utilities/pricing/constants'; @@ -73,9 +74,10 @@ export const TwoStepRegion = (props: CombinedProps) => { const { data: regions } = useRegionsQuery(); const { params } = useLinodeCreateQueryParams(); + const flags = useFlags(); return ( - + Region { disabled={disabled} disabledRegions={disabledRegions} errorText={errorText} + flags={flags} onChange={(e, region) => onChange(region)} regionFilter="core" regions={regions ?? []} @@ -140,6 +143,7 @@ export const TwoStepRegion = (props: CombinedProps) => { disabled={disabled} disabledRegions={disabledRegions} errorText={errorText} + flags={flags} onChange={(e, region) => onChange(region)} regionFilter={regionFilter} regions={regions ?? []} diff --git a/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserData.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserData.test.tsx index b98c7e924bd..80601ccb056 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserData.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserData.test.tsx @@ -1,7 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import { fireEvent } from '@testing-library/react'; import * as React from 'react'; -import { imageFactory, regionFactory } from 'src/factories'; +import { imageFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserDataHeading.tsx b/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserDataHeading.tsx index b3103192789..8e4a4325aec 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserDataHeading.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserDataHeading.tsx @@ -5,7 +5,7 @@ import { Link } from 'src/components/Link'; import { useLinodeCreateQueryParams } from '../utilities'; -import type { LinodeCreateType } from '../types'; +import type { LinodeCreateType } from '@linode/utilities'; export const UserDataHeading = () => { const { params } = useLinodeCreateQueryParams(); diff --git a/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLAN.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLAN.test.tsx index 80f9b2193dc..222ad4bc6e1 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLAN.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLAN.test.tsx @@ -1,7 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import React from 'react'; -import { regionFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPC.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPC.test.tsx index eb193d24815..1c02510da41 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPC.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPC.test.tsx @@ -1,6 +1,6 @@ +import { regionFactory } from '@linode/utilities'; import React from 'react'; -import { regionFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/resolvers.ts b/packages/manager/src/features/Linodes/LinodeCreate/resolvers.ts index b4095fd6905..3bd13dea259 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/resolvers.ts +++ b/packages/manager/src/features/Linodes/LinodeCreate/resolvers.ts @@ -13,11 +13,11 @@ import { } from './schemas'; import { getInterfacesPayload } from './utilities'; -import type { LinodeCreateType } from './types'; import type { LinodeCreateFormContext, LinodeCreateFormValues, } from './utilities'; +import type { LinodeCreateType } from '@linode/utilities'; import type { QueryClient } from '@tanstack/react-query'; import type { FieldErrors, Resolver } from 'react-hook-form'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/shared/LinodeSelectTableRow.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/shared/LinodeSelectTableRow.test.tsx index 085c3f6d85f..2e10389b690 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/shared/LinodeSelectTableRow.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/shared/LinodeSelectTableRow.test.tsx @@ -1,12 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import { - imageFactory, - linodeFactory, - regionFactory, - typeFactory, -} from 'src/factories'; +import { imageFactory, linodeFactory, typeFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { diff --git a/packages/manager/src/features/Linodes/LinodeCreate/utilities.ts b/packages/manager/src/features/Linodes/LinodeCreate/utilities.ts index 187b44eb538..66081f3fafc 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/utilities.ts +++ b/packages/manager/src/features/Linodes/LinodeCreate/utilities.ts @@ -23,7 +23,6 @@ import { getDefaultUDFData } from './Tabs/StackScripts/UserDefinedFields/utiliti import type { LinodeCreateInterface } from './Networking/utilities'; import type { StackScriptTabType } from './Tabs/StackScripts/utilities'; -import type { LinodeCreateType } from './types'; import type { AccountSettings, CreateLinodeRequest, @@ -33,6 +32,7 @@ import type { Profile, StackScript, } from '@linode/api-v4'; +import type { LinodeCreateType } from '@linode/utilities'; import type { QueryClient } from '@tanstack/react-query'; import type { FieldErrors } from 'react-hook-form'; diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/EnableBackupsDialog.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/EnableBackupsDialog.test.tsx index 2ab7837e1a9..767a5ef4671 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/EnableBackupsDialog.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/EnableBackupsDialog.test.tsx @@ -1,7 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import * as React from 'react'; import { DISK_ENCRYPTION_BACKUPS_CAVEAT_COPY } from 'src/components/Encryption/constants'; -import { linodeFactory, regionFactory } from 'src/factories'; +import { linodeFactory } from 'src/factories'; import { typeFactory } from 'src/factories/types'; import { PRICES_RELOAD_ERROR_NOTICE_TEXT } from 'src/utilities/pricing/constants'; import { renderWithTheme } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/NetworkTransfer.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/NetworkTransfer.test.tsx index de7cd04dfe4..cad53f7fbe1 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/NetworkTransfer.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/NetworkTransfer.test.tsx @@ -1,10 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import React from 'react'; -import { - accountTransferFactory, - linodeTransferFactory, - regionFactory, -} from 'src/factories'; +import { accountTransferFactory, linodeTransferFactory } from 'src/factories'; import { typeFactory } from 'src/factories/types'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/NetworkingSummaryPanel.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/NetworkingSummaryPanel.tsx index cca3fd1146b..a283bc8dc04 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/NetworkingSummaryPanel.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/NetworkingSummaryPanel.tsx @@ -1,10 +1,11 @@ +import { useLinodeQuery } from '@linode/queries'; import { Paper } from '@linode/ui'; import Grid from '@mui/material/Grid2'; import { styled, useTheme } from '@mui/material/styles'; import * as React from 'react'; import { useIsGeckoEnabled } from 'src/components/RegionSelect/RegionSelect.utils'; -import { useLinodeQuery } from '@linode/queries'; +import { useFlags } from 'src/hooks/useFlags'; import { DNSResolvers } from './DNSResolvers'; import { NetworkTransfer } from './NetworkTransfer'; @@ -15,10 +16,11 @@ interface Props { } export const LinodeNetworkingSummaryPanel = React.memo((props: Props) => { + const flags = useFlags(); + const theme = useTheme(); // @todo maybe move this query closer to the consuming component const { data: linode } = useLinodeQuery(props.linodeId); - const { isGeckoLAEnabled } = useIsGeckoEnabled(); - const theme = useTheme(); + const { isGeckoLAEnabled } = useIsGeckoEnabled(flags); if (!linode) { return null; diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/VPCPanel.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/VPCPanel.test.tsx index 74e9117610c..7357606aeb0 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/VPCPanel.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/VPCPanel.test.tsx @@ -1,7 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import * as React from 'react'; -import { accountFactory, regionFactory } from 'src/factories'; +import { accountFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/Linodes/LinodesLanding/DisplayGroupedLinodes.tsx b/packages/manager/src/features/Linodes/LinodesLanding/DisplayGroupedLinodes.tsx index 1c6dd625ca2..2843571e404 100644 --- a/packages/manager/src/features/Linodes/LinodesLanding/DisplayGroupedLinodes.tsx +++ b/packages/manager/src/features/Linodes/LinodesLanding/DisplayGroupedLinodes.tsx @@ -16,6 +16,7 @@ import { TableCell } from 'src/components/TableCell'; import { TableRow } from 'src/components/TableRow'; import { TableRowEmpty } from 'src/components/TableRowEmpty/TableRowEmpty'; import { TableRowLoading } from 'src/components/TableRowLoading/TableRowLoading'; +import { useFlags } from 'src/hooks/useFlags'; import { useInfinitePageSize } from 'src/hooks/useInfinitePageSize'; import { @@ -94,7 +95,9 @@ export const DisplayGroupedLinodes = (props: DisplayGroupedLinodesProps) => { return acc; }, 0); - const { isGeckoLAEnabled } = useIsGeckoEnabled(); + const flags = useFlags(); + + const { isGeckoLAEnabled } = useIsGeckoEnabled(flags); if (display === 'grid') { return ( diff --git a/packages/manager/src/features/Linodes/LinodesLanding/DisplayLinodes.tsx b/packages/manager/src/features/Linodes/LinodesLanding/DisplayLinodes.tsx index 521aec2df9b..d8142cc35aa 100644 --- a/packages/manager/src/features/Linodes/LinodesLanding/DisplayLinodes.tsx +++ b/packages/manager/src/features/Linodes/LinodesLanding/DisplayLinodes.tsx @@ -1,5 +1,4 @@ -import { Box, CircleProgress, Paper, Tooltip } from '@linode/ui'; -import { IconButton } from '@linode/ui'; +import { Box, CircleProgress, IconButton, Paper, Tooltip } from '@linode/ui'; import { getQueryParamsFromQueryString } from '@linode/utilities'; import Grid from '@mui/material/Grid2'; import * as React from 'react'; @@ -13,6 +12,7 @@ import { getMinimumPageSizeForNumberOfItems } from 'src/components/PaginationFoo import { useIsGeckoEnabled } from 'src/components/RegionSelect/RegionSelect.utils'; import { TableBody } from 'src/components/TableBody'; import { TableRowLoading } from 'src/components/TableRowLoading/TableRowLoading'; +import { useFlags } from 'src/hooks/useFlags'; import { useInfinitePageSize } from 'src/hooks/useInfinitePageSize'; import { StyledControlHeader } from './DisplayLinodes.styles'; @@ -82,6 +82,7 @@ export const DisplayLinodes = React.memo((props: DisplayLinodesProps) => { const displayViewDescriptionId = React.useId(); const groupByDescriptionId = React.useId(); const { infinitePageSize, setInfinitePageSize } = useInfinitePageSize(); + const flags = useFlags(); const numberOfLinodesWithMaintenance = React.useMemo(() => { return data.reduce((acc, thisLinode) => { @@ -104,7 +105,7 @@ export const DisplayLinodes = React.memo((props: DisplayLinodesProps) => { const params = getQueryParamsFromQueryString(search); const queryPage = Math.min(Number(params.page), maxPageNumber) || 1; - const { isGeckoLAEnabled } = useIsGeckoEnabled(); + const { isGeckoLAEnabled } = useIsGeckoEnabled(flags); return ( { currentCapability="Linodes" disableClearable errorText={errorText} + flags={flags} label="New Region" onChange={(e, region) => handleSelectRegion(region.id)} value={selectedRegion} diff --git a/packages/manager/src/features/Linodes/index.tsx b/packages/manager/src/features/Linodes/index.tsx index 0be63223a2c..de57d6ebe58 100644 --- a/packages/manager/src/features/Linodes/index.tsx +++ b/packages/manager/src/features/Linodes/index.tsx @@ -1,13 +1,14 @@ +import { + useAllAccountMaintenanceQuery, + useAllLinodesQuery, +} from '@linode/queries'; import { createLazyRoute } from '@tanstack/react-router'; import React from 'react'; import { Redirect, Route, Switch } from 'react-router-dom'; import { useIsGeckoEnabled } from 'src/components/RegionSelect/RegionSelect.utils'; import { SuspenseLoader } from 'src/components/SuspenseLoader'; -import { - useAllAccountMaintenanceQuery, - useAllLinodesQuery, -} from '@linode/queries'; +import { useFlags } from 'src/hooks/useFlags'; import { useInProgressEvents } from 'src/queries/events/events'; import { addMaintenanceToLinodes } from 'src/utilities/linodes'; import { storage } from 'src/utilities/storage'; @@ -54,8 +55,9 @@ export const LinodesLandingWrapper = React.memo(() => { {}, PENDING_MAINTENANCE_FILTER ); + const flags = useFlags(); - const { isGeckoLAEnabled } = useIsGeckoEnabled(); + const { isGeckoLAEnabled } = useIsGeckoEnabled(flags); const [regionFilter, setRegionFilter] = React.useState< RegionFilter | undefined diff --git a/packages/manager/src/features/Linodes/types.ts b/packages/manager/src/features/Linodes/types.ts index 39718d3acee..a55e038b791 100644 --- a/packages/manager/src/features/Linodes/types.ts +++ b/packages/manager/src/features/Linodes/types.ts @@ -1,5 +1,4 @@ -import type { LinodeCreateType } from './LinodeCreate/types'; -import type { BaseQueryParams } from '@linode/utilities'; +import type { BaseQueryParams, LinodeCreateType } from '@linode/utilities'; export type DialogType = | 'delete' diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx index fe520fdb23c..f90e8830745 100644 --- a/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx +++ b/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx @@ -37,6 +37,7 @@ import { RegionHelperText } from 'src/components/SelectRegionPanel/RegionHelperT import { TagsInput } from 'src/components/TagsInput/TagsInput'; import { FIREWALL_GET_STARTED_LINK } from 'src/constants'; import { getRestrictedResourceText } from 'src/features/Account/utils'; +import { useFlags } from 'src/hooks/useFlags'; import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck'; import { sendCreateNodeBalancerEvent } from 'src/utilities/analytics/customEventAnalytics'; import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; @@ -97,6 +98,7 @@ const defaultFieldsStates = { }; const NodeBalancerCreate = () => { + const flags = useFlags(); const navigate = useNavigate(); const { data: agreements } = useAccountAgreements(); const { data: profile } = useProfile(); @@ -543,6 +545,7 @@ const NodeBalancerCreate = () => { currentCapability="NodeBalancers" disableClearable errorText={hasErrorFor('region')} + flags={flags} noMarginTop onChange={(e, region) => regionChange(region?.id ?? '')} regions={regions ?? []} diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyRegions/AccessKeyRegions.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyRegions/AccessKeyRegions.tsx index 384e504365c..350c5d72bb7 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyRegions/AccessKeyRegions.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyRegions/AccessKeyRegions.tsx @@ -3,6 +3,7 @@ import * as React from 'react'; import { RegionMultiSelect } from 'src/components/RegionSelect/RegionMultiSelect'; import { useObjectStorageRegions } from 'src/features/ObjectStorage/hooks/useObjectStorageRegions'; +import { useFlags } from 'src/hooks/useFlags'; import { useIsObjectStorageGen2Enabled } from '../../hooks/useIsObjectStorageGen2Enabled'; import { WHITELISTED_REGIONS } from '../../utilities'; @@ -25,6 +26,7 @@ const sortRegionOptions = (a: Region, b: Region) => { export const AccessKeyRegions = (props: Props) => { const { disabled, error, onChange, required, selectedRegion } = props; + const flags = useFlags(); const { allRegionsError, availableStorageRegions, @@ -46,6 +48,7 @@ export const AccessKeyRegions = (props: Props) => { currentCapability="Object Storage" disabled={disabled} errorText={errorText} + flags={flags} isClearable={false} label="Regions" onChange={onChange} diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/HostNameTableCell.test.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/HostNameTableCell.test.tsx index 63a1a81ef19..f093cacf825 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/HostNameTableCell.test.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/HostNameTableCell.test.tsx @@ -1,8 +1,9 @@ +import { regionFactory } from '@linode/utilities'; import '@testing-library/jest-dom'; import { waitFor } from '@testing-library/react'; import React from 'react'; -import { objectStorageKeyFactory, regionFactory } from 'src/factories'; +import { objectStorageKeyFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithTheme } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx index 89bb66640a1..7ad193597b8 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx @@ -1,8 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import { screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import { regionFactory } from 'src/factories/regions'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { HostNamesDrawer } from './HostNamesDrawer'; diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesList.test.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesList.test.tsx index 115cc71f937..a6facc18c09 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesList.test.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesList.test.tsx @@ -1,9 +1,9 @@ +import { regionFactory } from '@linode/utilities'; import { screen } from '@testing-library/react'; import React from 'react'; -import { regionFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; -import { http, HttpResponse, server } from 'src/mocks/testServer'; +import { HttpResponse, http, server } from 'src/mocks/testServer'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { HostNamesList } from './HostNamesList'; diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx index fbb0c7df5a7..239b43adc71 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.test.tsx @@ -1,4 +1,8 @@ -import { readableBytes, truncateMiddle } from '@linode/utilities'; +import { + readableBytes, + regionFactory, + truncateMiddle, +} from '@linode/utilities'; import { screen, waitFor } from '@testing-library/react'; import React from 'react'; import { vi } from 'vitest'; @@ -7,7 +11,6 @@ import { objectStorageBucketFactory, objectStorageBucketFactoryGen2, profileFactory, - regionFactory, } from 'src/factories'; import { formatDate } from 'src/utilities/formatDate'; import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers'; diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketRegions.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketRegions.test.tsx index a6eeaca8f4f..de0ea605363 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketRegions.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketRegions.test.tsx @@ -1,7 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import { screen } from '@testing-library/react'; import React from 'react'; -import { regionFactory } from 'src/factories'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { BucketRegions } from './BucketRegions'; diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketRegions.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketRegions.tsx index 36f85d91bf5..13a79f4cf23 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketRegions.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketRegions.tsx @@ -2,6 +2,8 @@ import * as React from 'react'; import { RegionSelect } from 'src/components/RegionSelect/RegionSelect'; import { useObjectStorageRegions } from 'src/features/ObjectStorage/hooks/useObjectStorageRegions'; +import { useFlags } from 'src/hooks/useFlags'; + import { useIsObjectStorageGen2Enabled } from '../hooks/useIsObjectStorageGen2Enabled'; import { WHITELISTED_REGIONS } from '../utilities'; @@ -24,6 +26,8 @@ export const BucketRegions = (props: Props) => { const { isObjectStorageGen2Enabled } = useIsObjectStorageGen2Enabled(); + const flags = useFlags(); + // Error could be: 1. General Regions error, 2. Field error, 3. Nothing const errorText = error || allRegionsError?.[0]?.reason; @@ -36,6 +40,7 @@ export const BucketRegions = (props: Props) => { disableClearable disabled={disabled} errorText={errorText} + flags={flags} label="Region" onBlur={onBlur} onChange={(e, region) => onChange(region.id)} diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/ClusterSelect.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/ClusterSelect.tsx index e3215ae4c62..04ab044c216 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/ClusterSelect.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/ClusterSelect.tsx @@ -2,6 +2,7 @@ import { useRegionsQuery } from '@linode/queries'; import * as React from 'react'; import { RegionSelect } from 'src/components/RegionSelect/RegionSelect'; +import { useFlags } from 'src/hooks/useFlags'; import { useObjectStorageClusters } from 'src/queries/object-storage/queries'; import type { Region } from '@linode/api-v4/lib/regions'; @@ -28,6 +29,8 @@ export const ClusterSelect: React.FC = (props) => { const { data: clusters, error: clustersError } = useObjectStorageClusters(); const { data: regions } = useRegionsQuery(); + const flags = useFlags(); + const regionOptions = clusters?.reduce((acc, cluster) => { const region = regions?.find((r) => r.id === cluster.region); if (region) { @@ -50,6 +53,7 @@ export const ClusterSelect: React.FC = (props) => { disableClearable disabled={disabled} errorText={errorText} + flags={flags} label="Region" onBlur={onBlur} onChange={(e, region) => onChange(region.id)} diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx index f01236e1113..4a73de1f4fd 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx @@ -1,3 +1,4 @@ +import { regionFactory } from '@linode/utilities'; import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; @@ -5,7 +6,6 @@ import * as React from 'react'; import { accountSettingsFactory, objectStorageClusterFactory, - regionFactory, } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { HttpResponse, http, server } from 'src/mocks/testServer'; diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsAssignLinodesDrawer.test.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsAssignLinodesDrawer.test.tsx index afaa30e96ad..efa6105d883 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsAssignLinodesDrawer.test.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsAssignLinodesDrawer.test.tsx @@ -1,11 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import { fireEvent } from '@testing-library/react'; import * as React from 'react'; -import { - linodeFactory, - placementGroupFactory, - regionFactory, -} from 'src/factories'; +import { linodeFactory, placementGroupFactory } from 'src/factories'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { PlacementGroupsAssignLinodesDrawer } from './PlacementGroupsAssignLinodesDrawer'; diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx index 81dcae30e01..262f07b729e 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx @@ -31,6 +31,7 @@ import { DocumentTitleSegment } from 'src/components/DocumentTitle'; import { NotFound } from 'src/components/NotFound'; import { RegionSelect } from 'src/components/RegionSelect/RegionSelect'; import { getRestrictedResourceText } from 'src/features/Account/utils'; +import { useFlags } from 'src/hooks/useFlags'; import { sendLinodeCreateFormStepEvent } from 'src/utilities/analytics/formEventAnalytics'; import { getFormikErrorsFromAPIErrors } from 'src/utilities/formikErrorUtils'; @@ -42,15 +43,15 @@ import { hasRegionReachedPlacementGroupCapacity, } from './utils'; -import type { LinodeCreateType } from '../Linodes/LinodeCreate/types'; import type { PlacementGroupsCreateDrawerProps } from './types'; import type { CreatePlacementGroupPayload, PlacementGroup, Region, } from '@linode/api-v4'; +import type { DisableItemOption } from '@linode/ui'; +import type { LinodeCreateType } from '@linode/utilities'; import type { FormikHelpers } from 'formik'; -import type { DisableItemOption } from 'src/components/ListItemOption'; export const PlacementGroupsCreateDrawer = ( props: PlacementGroupsCreateDrawerProps @@ -62,6 +63,7 @@ export const PlacementGroupsCreateDrawer = ( open, selectedRegionId, } = props; + const flags = useFlags(); const { data: regions } = useRegionsQuery(); const { data: allPlacementGroupsInRegion } = useAllPlacementGroupsQuery({ enabled: Boolean(selectedRegionId), @@ -265,6 +267,7 @@ export const PlacementGroupsCreateDrawer = ( currentCapability="Placement Group" disableClearable disabledRegions={disabledRegions} + flags={flags} helperText={values.region && pgRegionLimitHelperText} onChange={(e, region) => handleRegionSelect(region.id)} regions={regions ?? []} diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.test.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.test.tsx index ea98bd86674..b827b445d98 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.test.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.test.tsx @@ -1,10 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import * as React from 'react'; -import { - linodeFactory, - placementGroupFactory, - regionFactory, -} from 'src/factories'; +import { linodeFactory, placementGroupFactory } from 'src/factories'; import { renderWithThemeAndRouter } from 'src/utilities/testHelpers'; import { PlacementGroupsDetail } from './PlacementGroupsDetail'; diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsSummary/PlacementGroupsSummary.test.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsSummary/PlacementGroupsSummary.test.tsx index 27922913f5c..16b1f00d0bf 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsSummary/PlacementGroupsSummary.test.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsSummary/PlacementGroupsSummary.test.tsx @@ -1,6 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import * as React from 'react'; -import { placementGroupFactory, regionFactory } from 'src/factories'; +import { placementGroupFactory } from 'src/factories'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { PlacementGroupsSummary } from './PlacementGroupsSummary'; diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetailPanel.test.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetailPanel.test.tsx index eff250d88e4..4f8bf2fbefe 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetailPanel.test.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetailPanel.test.tsx @@ -1,6 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import * as React from 'react'; -import { placementGroupFactory, regionFactory } from 'src/factories'; +import { placementGroupFactory } from 'src/factories'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { PlacementGroupsDetailPanel } from './PlacementGroupsDetailPanel'; diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsEditDrawer.test.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsEditDrawer.test.tsx index 11ce5ae6be1..f0f4b1afccd 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsEditDrawer.test.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsEditDrawer.test.tsx @@ -1,7 +1,8 @@ +import { regionFactory } from '@linode/utilities'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; -import { placementGroupFactory, regionFactory } from 'src/factories'; +import { placementGroupFactory } from 'src/factories'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { PlacementGroupsEditDrawer } from './PlacementGroupsEditDrawer'; diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.test.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.test.tsx index 7b5fc4f1a8b..b5c159373c5 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.test.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.test.tsx @@ -1,10 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import * as React from 'react'; -import { - linodeFactory, - placementGroupFactory, - regionFactory, -} from 'src/factories'; +import { linodeFactory, placementGroupFactory } from 'src/factories'; import { renderWithTheme, resizeScreenSize, diff --git a/packages/manager/src/features/PlacementGroups/utils.test.ts b/packages/manager/src/features/PlacementGroups/utils.test.ts index c50f7c351ec..63a0d4061f2 100644 --- a/packages/manager/src/features/PlacementGroups/utils.test.ts +++ b/packages/manager/src/features/PlacementGroups/utils.test.ts @@ -1,10 +1,7 @@ +import { regionFactory } from '@linode/utilities'; import { renderHook } from '@testing-library/react'; -import { - linodeFactory, - placementGroupFactory, - regionFactory, -} from 'src/factories'; +import { linodeFactory, placementGroupFactory } from 'src/factories'; import { getLinodesFromAllPlacementGroups, diff --git a/packages/manager/src/features/VPCs/VPCCreate/FormComponents/SubnetContent.tsx b/packages/manager/src/features/VPCs/VPCCreate/FormComponents/SubnetContent.tsx index 9f3c15074ec..64a6b3a6816 100644 --- a/packages/manager/src/features/VPCs/VPCCreate/FormComponents/SubnetContent.tsx +++ b/packages/manager/src/features/VPCs/VPCCreate/FormComponents/SubnetContent.tsx @@ -15,7 +15,7 @@ import { } from './VPCCreateForm.styles'; import type { CreateVPCPayload } from '@linode/api-v4'; -import type { LinodeCreateType } from 'src/features/Linodes/LinodeCreate/types'; +import type { LinodeCreateType } from '@linode/utilities'; import type { LinodeCreateQueryParams } from 'src/features/Linodes/types'; interface Props { diff --git a/packages/manager/src/features/VPCs/VPCCreate/FormComponents/VPCTopSectionContent.tsx b/packages/manager/src/features/VPCs/VPCCreate/FormComponents/VPCTopSectionContent.tsx index ff986f11b1c..3d7fd33e3c4 100644 --- a/packages/manager/src/features/VPCs/VPCCreate/FormComponents/VPCTopSectionContent.tsx +++ b/packages/manager/src/features/VPCs/VPCCreate/FormComponents/VPCTopSectionContent.tsx @@ -6,14 +6,15 @@ import { useLocation } from 'react-router-dom'; import { Link } from 'src/components/Link'; import { RegionSelect } from 'src/components/RegionSelect/RegionSelect'; +import { useFlags } from 'src/hooks/useFlags'; import { sendLinodeCreateFormInputEvent } from 'src/utilities/analytics/formEventAnalytics'; import { VPC_CREATE_FORM_VPC_HELPER_TEXT } from '../../constants'; import { StyledBodyTypography } from './VPCCreateForm.styles'; -import type { Region } from '@linode/api-v4'; import type { CreateVPCPayload } from '@linode/api-v4'; -import type { LinodeCreateType } from 'src/features/Linodes/LinodeCreate/types'; +import type { Region } from '@linode/api-v4'; +import type { LinodeCreateType } from '@linode/utilities'; import type { LinodeCreateQueryParams } from 'src/features/Linodes/types'; interface Props { @@ -25,6 +26,7 @@ interface Props { export const VPCTopSectionContent = (props: Props) => { const { disabled, isDrawer, regions } = props; const location = useLocation(); + const flags = useFlags(); const isFromLinodeCreate = location.pathname.includes('/linodes/create'); const queryParams = getQueryParamsFromQueryString( location.search @@ -59,6 +61,7 @@ export const VPCTopSectionContent = (props: Props) => { currentCapability="VPCs" disabled={isDrawer ? true : disabled} errorText={fieldState.error?.message} + flags={flags} onBlur={field.onBlur} onChange={(_, region) => field.onChange(region?.id ?? '')} regions={regions} diff --git a/packages/manager/src/features/VPCs/VPCLanding/VPCEditDrawer.tsx b/packages/manager/src/features/VPCs/VPCLanding/VPCEditDrawer.tsx index f94cfc1e712..4b42d252d68 100644 --- a/packages/manager/src/features/VPCs/VPCLanding/VPCEditDrawer.tsx +++ b/packages/manager/src/features/VPCs/VPCLanding/VPCEditDrawer.tsx @@ -12,6 +12,7 @@ import { Controller, useForm } from 'react-hook-form'; import { NotFound } from 'src/components/NotFound'; import { RegionSelect } from 'src/components/RegionSelect/RegionSelect'; +import { useFlags } from 'src/hooks/useFlags'; import type { UpdateVPCPayload, VPC } from '@linode/api-v4'; @@ -26,6 +27,7 @@ const REGION_HELPER_TEXT = 'Region cannot be changed during beta.'; export const VPCEditDrawer = (props: Props) => { const { onClose, open, vpc } = props; + const flags = useFlags(); const { data: profile } = useProfile(); const { data: grants } = useGrants(); @@ -131,6 +133,7 @@ export const VPCEditDrawer = (props: Props) => { currentCapability="VPCs" disabled // the Region field will not be editable during beta errorText={(regionsError && regionsError[0].reason) || undefined} + flags={flags} helperText={REGION_HELPER_TEXT} onChange={() => null} regions={regionsData} diff --git a/packages/manager/src/features/Volumes/VolumeCreate.tsx b/packages/manager/src/features/Volumes/VolumeCreate.tsx index eeb10198f8a..07ff836f15f 100644 --- a/packages/manager/src/features/Volumes/VolumeCreate.tsx +++ b/packages/manager/src/features/Volumes/VolumeCreate.tsx @@ -45,6 +45,7 @@ import { MAX_VOLUME_SIZE } from 'src/constants'; import { EUAgreementCheckbox } from 'src/features/Account/Agreements/EUAgreementCheckbox'; import { getRestrictedResourceText } from 'src/features/Account/utils'; import { LinodeSelect } from 'src/features/Linodes/LinodeSelect/LinodeSelect'; +import { useFlags } from 'src/hooks/useFlags'; import { sendCreateVolumeEvent } from 'src/utilities/analytics/customEventAnalytics'; import { doesRegionSupportFeature } from 'src/utilities/doesRegionSupportFeature'; import { getErrorStringOrDefault } from 'src/utilities/errorUtils'; @@ -126,6 +127,7 @@ const useStyles = makeStyles()((theme: Theme) => ({ })); export const VolumeCreate = () => { + const flags = useFlags(); const theme = useTheme(); const navigate = useNavigate(); const { classes } = useStyles(); @@ -410,6 +412,7 @@ export const VolumeCreate = () => { currentCapability="Block Storage" disabled={doesNotHavePermission} errorText={touched.region ? errors.region : undefined} + flags={flags} label="Region" onBlur={handleBlur} regions={regions ?? []} diff --git a/packages/manager/src/features/components/PlansPanel/PlansAvailabilityNotice.test.tsx b/packages/manager/src/features/components/PlansPanel/PlansAvailabilityNotice.test.tsx index 43f74766a0b..0542b51e9b9 100644 --- a/packages/manager/src/features/components/PlansPanel/PlansAvailabilityNotice.test.tsx +++ b/packages/manager/src/features/components/PlansPanel/PlansAvailabilityNotice.test.tsx @@ -1,7 +1,6 @@ -import { formatPlanTypes } from '@linode/utilities'; +import { formatPlanTypes, regionFactory } from '@linode/utilities'; import React from 'react'; -import { regionFactory } from 'src/factories/regions'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { PlansAvailabilityNotice } from './PlansAvailabilityNotice'; diff --git a/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx b/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx index de5053e9a65..ac6c95947e0 100644 --- a/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx +++ b/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx @@ -88,7 +88,7 @@ export const PlansPanel = (props: PlansPanelProps) => { } = props; const flags = useFlags(); - const { isGeckoLAEnabled } = useIsGeckoEnabled(); + const { isGeckoLAEnabled } = useIsGeckoEnabled(flags); const location = useLocation(); const params = getQueryParamsFromQueryString( location.search diff --git a/packages/manager/src/features/components/PlansPanel/utils.test.ts b/packages/manager/src/features/components/PlansPanel/utils.test.ts index b1988601ab2..e17ff6990ab 100644 --- a/packages/manager/src/features/components/PlansPanel/utils.test.ts +++ b/packages/manager/src/features/components/PlansPanel/utils.test.ts @@ -1,7 +1,7 @@ +import { regionAvailabilityFactory } from '@linode/utilities'; import { renderHook } from '@testing-library/react'; import { extendedTypes } from 'src/__data__/ExtendedType'; -import { regionAvailabilityFactory } from 'src/factories'; import { planSelectionTypeFactory, typeFactory } from 'src/factories/types'; import { PLAN_IS_CURRENTLY_UNAVAILABLE_COPY } from './constants'; diff --git a/packages/manager/src/hooks/useCreateVPC.ts b/packages/manager/src/hooks/useCreateVPC.ts index 3bb7cfda10a..d2eff39607b 100644 --- a/packages/manager/src/hooks/useCreateVPC.ts +++ b/packages/manager/src/hooks/useCreateVPC.ts @@ -19,7 +19,7 @@ import { sendLinodeCreateFormStepEvent } from 'src/utilities/analytics/formEvent import { DEFAULT_SUBNET_IPV4_VALUE } from 'src/utilities/subnets'; import type { CreateVPCPayload, VPC } from '@linode/api-v4'; -import type { LinodeCreateType } from 'src/features/Linodes/LinodeCreate/types'; +import type { LinodeCreateType } from '@linode/utilities'; // Custom hook to consolidate shared logic between VPCCreate.tsx and VPCCreateDrawer.tsx export interface UseCreateVPCInputs { diff --git a/packages/manager/src/mocks/presets/crud/handlers/quotas.ts b/packages/manager/src/mocks/presets/crud/handlers/quotas.ts index ca8167f1afe..2d9c2cad3d1 100644 --- a/packages/manager/src/mocks/presets/crud/handlers/quotas.ts +++ b/packages/manager/src/mocks/presets/crud/handlers/quotas.ts @@ -1,7 +1,6 @@ -import { pickRandom } from '@linode/utilities'; +import { pickRandom, regions } from '@linode/utilities'; import { http } from 'msw'; -import { regions } from 'src/__data__/regionsData'; import { objectStorageEndpointsFactory } from 'src/factories/objectStorage'; import { quotaFactory, quotaUsageFactory } from 'src/factories/quotas'; import { diff --git a/packages/manager/src/mocks/presets/extra/regions/legacyRegions.ts b/packages/manager/src/mocks/presets/extra/regions/legacyRegions.ts index 8aa91a808f9..0c78d6470e3 100644 --- a/packages/manager/src/mocks/presets/extra/regions/legacyRegions.ts +++ b/packages/manager/src/mocks/presets/extra/regions/legacyRegions.ts @@ -1,6 +1,6 @@ +import { regions } from '@linode/utilities'; import { http } from 'msw'; -import { regions } from 'src/__data__/regionsData'; import { makePaginatedResponse } from 'src/mocks/utilities/response'; import type { MockPresetExtra } from 'src/mocks/types'; diff --git a/packages/manager/src/mocks/serverHandlers.ts b/packages/manager/src/mocks/serverHandlers.ts index 5cf51a3c4e4..7b488e2ef81 100644 --- a/packages/manager/src/mocks/serverHandlers.ts +++ b/packages/manager/src/mocks/serverHandlers.ts @@ -6,16 +6,19 @@ * * New handlers should be added to the CRUD baseline preset instead (ex: src/mocks/presets/crud/handlers/linodes.ts) which support a much more dynamic data mocking. */ -import { pickRandom } from '@linode/utilities'; +import { + accountAvailabilityFactory, + pickRandom, + regionAvailabilityFactory, + regions, +} from '@linode/utilities'; import { DateTime } from 'luxon'; import { HttpResponse, http } from 'msw'; -import { regions } from 'src/__data__/regionsData'; import { MOCK_THEME_STORAGE_KEY } from 'src/dev-tools/ThemeSelector'; import { VLANFactory, // abuseTicketNotificationFactory, - accountAvailabilityFactory, accountBetaFactory, accountFactory, accountMaintenanceFactory, @@ -90,7 +93,6 @@ import { proDedicatedTypeFactory, profileFactory, promoFactory, - regionAvailabilityFactory, securityQuestionsFactory, serviceTypesFactory, stackScriptFactory, diff --git a/packages/manager/src/routes/firewalls/index.ts b/packages/manager/src/routes/firewalls/index.ts index 66436a0eb23..9e3674c4e22 100644 --- a/packages/manager/src/routes/firewalls/index.ts +++ b/packages/manager/src/routes/firewalls/index.ts @@ -4,7 +4,7 @@ import { rootRoute } from '../root'; import { FirewallsRoute } from './FirewallsRoute'; import type { TableSearchParams } from '../types'; -import type { LinodeCreateType } from 'src/features/Linodes/LinodeCreate/types'; +import type { LinodeCreateType } from '@linode/utilities'; export interface FirewallsSearchParams extends TableSearchParams { type?: LinodeCreateType; diff --git a/packages/manager/src/utilities/analytics/formEventAnalytics.ts b/packages/manager/src/utilities/analytics/formEventAnalytics.ts index 084fb0fc51b..46086eae603 100644 --- a/packages/manager/src/utilities/analytics/formEventAnalytics.ts +++ b/packages/manager/src/utilities/analytics/formEventAnalytics.ts @@ -7,7 +7,7 @@ import type { FormStepEvent, LinodeCreateFormEventOptions, } from './types'; -import type { LinodeCreateType } from 'src/features/Linodes/LinodeCreate/types'; +import type { LinodeCreateType } from '@linode/utilities'; /** * Form Events diff --git a/packages/manager/src/utilities/analytics/types.ts b/packages/manager/src/utilities/analytics/types.ts index 3ccf69f4de8..c4d635f122e 100644 --- a/packages/manager/src/utilities/analytics/types.ts +++ b/packages/manager/src/utilities/analytics/types.ts @@ -1,4 +1,4 @@ -import type { LinodeCreateType } from 'src/features/Linodes/LinodeCreate/types'; +import type { LinodeCreateType } from '@linode/utilities'; // Define a custom type for the _satellite object declare global { diff --git a/packages/manager/src/utilities/doesRegionSupportFeature.test.ts b/packages/manager/src/utilities/doesRegionSupportFeature.test.ts index b2fae919e5b..e6633f276af 100644 --- a/packages/manager/src/utilities/doesRegionSupportFeature.test.ts +++ b/packages/manager/src/utilities/doesRegionSupportFeature.test.ts @@ -1,4 +1,4 @@ -import { regions } from 'src/__data__/regionsData'; +import { regions } from '@linode/utilities'; import { doesRegionSupportFeature } from './doesRegionSupportFeature'; diff --git a/packages/ui/.changeset/pr-11790-added-1741678870637.md b/packages/ui/.changeset/pr-11790-added-1741678870637.md new file mode 100644 index 00000000000..6da7f561fef --- /dev/null +++ b/packages/ui/.changeset/pr-11790-added-1741678870637.md @@ -0,0 +1,5 @@ +--- +"@linode/ui": Added +--- + +Move `ListItemOption` from `manager` to `ui` package ([#11790](https://github.com/linode/manager/pull/11790)) diff --git a/packages/manager/src/components/ListItemOption.tsx b/packages/ui/src/components/ListItemOption/ListItemOption.tsx similarity index 92% rename from packages/manager/src/components/ListItemOption.tsx rename to packages/ui/src/components/ListItemOption/ListItemOption.tsx index 14333d4d7e6..0074342f05c 100644 --- a/packages/manager/src/components/ListItemOption.tsx +++ b/packages/ui/src/components/ListItemOption/ListItemOption.tsx @@ -1,11 +1,15 @@ -import { Box, ListItem, SelectedIcon, Tooltip } from '@linode/ui'; import { styled } from '@mui/material/styles'; import { visuallyHidden } from '@mui/utils'; import React from 'react'; +import { Box } from '../Box'; +import { ListItem } from '../ListItem'; +import { SelectedIcon } from '../Autocomplete'; +import { Tooltip } from '../Tooltip'; + import type { ListItemComponentsPropsOverrides } from '@mui/material/ListItem'; -export interface ListItemProps { +export interface ListItemOptionProps { children?: React.ReactNode; disabledOptions?: DisableItemOption; item: T & { id: number | string }; @@ -34,7 +38,7 @@ export const ListItemOption = ({ maxHeight, props, selected, -}: ListItemProps) => { +}: ListItemOptionProps) => { const { className, onClick, ...rest } = props; const isItemOptionDisabled = Boolean(disabledOptions); const itemOptionDisabledReason = disabledOptions?.reason; diff --git a/packages/ui/src/components/ListItemOption/index.ts b/packages/ui/src/components/ListItemOption/index.ts new file mode 100644 index 00000000000..03d3422cd55 --- /dev/null +++ b/packages/ui/src/components/ListItemOption/index.ts @@ -0,0 +1 @@ +export * from './ListItemOption'; diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts index 7860eb3b358..bc0a56a62bd 100644 --- a/packages/ui/src/components/index.ts +++ b/packages/ui/src/components/index.ts @@ -24,6 +24,7 @@ export * from './InputAdornment'; export * from './InputLabel'; export * from './List'; export * from './ListItem'; +export * from './ListItemOption'; export * from './Notice'; export * from './Paper'; export * from './Radio'; diff --git a/packages/utilities/.changeset/pr-11790-added-1741678972894.md b/packages/utilities/.changeset/pr-11790-added-1741678972894.md new file mode 100644 index 00000000000..7995b218ed7 --- /dev/null +++ b/packages/utilities/.changeset/pr-11790-added-1741678972894.md @@ -0,0 +1,5 @@ +--- +"@linode/utilities": Added +--- + +Move `regionsData` from `manager` to `utilities` package ([#11790](https://github.com/linode/manager/pull/11790)) diff --git a/packages/utilities/.changeset/pr-11790-added-1742396887174.md b/packages/utilities/.changeset/pr-11790-added-1742396887174.md new file mode 100644 index 00000000000..3c8ffe2690f --- /dev/null +++ b/packages/utilities/.changeset/pr-11790-added-1742396887174.md @@ -0,0 +1,5 @@ +--- +"@linode/utilities": Added +--- + +Move `LinodeCreateType` to `utilities` package ([#11790](https://github.com/linode/manager/pull/11790)) diff --git a/packages/utilities/.prettierrc b/packages/utilities/.prettierrc index c563e850dad..7d06e0e8fdf 100644 --- a/packages/utilities/.prettierrc +++ b/packages/utilities/.prettierrc @@ -1,4 +1,4 @@ { "printWidth": 80, "singleQuote": true -} +} \ No newline at end of file diff --git a/packages/utilities/package.json b/packages/utilities/package.json index 0fd577f49d7..980b18d86c6 100644 --- a/packages/utilities/package.json +++ b/packages/utilities/package.json @@ -53,4 +53,4 @@ "prettier": "~2.2.1", "ramda": "~0.25.0" } -} +} \ No newline at end of file diff --git a/packages/utilities/src/__data__/index.ts b/packages/utilities/src/__data__/index.ts new file mode 100644 index 00000000000..4e832e3b55d --- /dev/null +++ b/packages/utilities/src/__data__/index.ts @@ -0,0 +1 @@ +export * from './regionsData'; diff --git a/packages/manager/src/__data__/regionsData.ts b/packages/utilities/src/__data__/regionsData.ts similarity index 100% rename from packages/manager/src/__data__/regionsData.ts rename to packages/utilities/src/__data__/regionsData.ts diff --git a/packages/manager/src/factories/accountAvailability.ts b/packages/utilities/src/factories/accountAvailability.ts similarity index 79% rename from packages/manager/src/factories/accountAvailability.ts rename to packages/utilities/src/factories/accountAvailability.ts index 05ce1dbd0ad..1d427dcf5b7 100644 --- a/packages/manager/src/factories/accountAvailability.ts +++ b/packages/utilities/src/factories/accountAvailability.ts @@ -1,5 +1,6 @@ -import { pickRandom } from '@linode/utilities'; -import { Factory } from '@linode/utilities'; +import { Factory } from './factoryProxy'; + +import { pickRandom } from '../helpers'; import type { AccountAvailability } from '@linode/api-v4'; diff --git a/packages/utilities/src/factories/index.ts b/packages/utilities/src/factories/index.ts index 603414c5554..2aecf0b5021 100644 --- a/packages/utilities/src/factories/index.ts +++ b/packages/utilities/src/factories/index.ts @@ -1,4 +1,6 @@ +export * from './accountAvailability'; export * from './config'; export * from './factoryProxy'; export * from './linodeConfigInterfaceFactory'; export * from './linodeInterface'; +export * from './regions'; diff --git a/packages/manager/src/factories/regions.ts b/packages/utilities/src/factories/regions.ts similarity index 96% rename from packages/manager/src/factories/regions.ts rename to packages/utilities/src/factories/regions.ts index 4b7460258d9..031b5f73223 100644 --- a/packages/manager/src/factories/regions.ts +++ b/packages/utilities/src/factories/regions.ts @@ -1,4 +1,4 @@ -import { Factory } from '@linode/utilities'; +import { Factory } from './factoryProxy'; import type { Country, diff --git a/packages/utilities/src/index.ts b/packages/utilities/src/index.ts index 2565a4b33af..21f4f2b8f5c 100644 --- a/packages/utilities/src/index.ts +++ b/packages/utilities/src/index.ts @@ -1,3 +1,5 @@ +export * from './__data__'; + export * from './constants'; export * from './factories'; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/types.ts b/packages/utilities/src/types/LinodeCreateType.ts similarity index 100% rename from packages/manager/src/features/Linodes/LinodeCreate/types.ts rename to packages/utilities/src/types/LinodeCreateType.ts diff --git a/packages/utilities/src/types/index.ts b/packages/utilities/src/types/index.ts index 2565f7a7d2c..86d9b2bfdad 100644 --- a/packages/utilities/src/types/index.ts +++ b/packages/utilities/src/types/index.ts @@ -1 +1,2 @@ +export * from './LinodeCreateType'; export * from './ManagerPreferences';