diff --git a/apps/phosphor-icon/src/locations/Field.spec.tsx b/apps/phosphor-icon/src/locations/Field.spec.tsx
index 76cf548116..18326f7450 100644
--- a/apps/phosphor-icon/src/locations/Field.spec.tsx
+++ b/apps/phosphor-icon/src/locations/Field.spec.tsx
@@ -15,34 +15,15 @@ describe('Field', () => {
mockSdk = createMockFieldSdk();
});
- it('opens the dialog with the latest installation parameters', async () => {
+ it('opens the dialog with installation parameters from the SDK', async () => {
const fieldSdk = createMockFieldSdk({
installationParameters: {
- enabledWeights: JSON.stringify(['regular']),
- positionOptions: JSON.stringify(['start']),
- iconAvailabilityMode: 'all',
- },
- liveInstallationParameters: {
enabledWeights: JSON.stringify(['bold', 'duotone']),
positionOptions: JSON.stringify(['end', 'top']),
iconAvailabilityMode: 'specific',
selectedIconNames: JSON.stringify(['airplane', 'anchor']),
},
});
- fieldSdk.cma = {
- appInstallation: {
- get: vi.fn(() =>
- Promise.resolve({
- parameters: {
- enabledWeights: JSON.stringify(['bold', 'duotone']),
- positionOptions: JSON.stringify(['end', 'top']),
- iconAvailabilityMode: 'specific',
- selectedIconNames: JSON.stringify(['airplane', 'anchor']),
- },
- })
- ),
- },
- } as never;
mockSdk = fieldSdk;
render();
@@ -75,25 +56,7 @@ describe('Field', () => {
positionOptions: JSON.stringify(['start']),
iconAvailabilityMode: 'all',
},
- liveInstallationParameters: {
- enabledWeights: JSON.stringify(['regular']),
- positionOptions: JSON.stringify(['start']),
- iconAvailabilityMode: 'all',
- },
});
- fieldSdk.cma = {
- appInstallation: {
- get: vi.fn(() =>
- Promise.resolve({
- parameters: {
- enabledWeights: JSON.stringify(['regular']),
- positionOptions: JSON.stringify(['start']),
- iconAvailabilityMode: 'all',
- },
- })
- ),
- },
- } as never;
mockSdk = fieldSdk;
render();
diff --git a/apps/phosphor-icon/src/locations/Field.tsx b/apps/phosphor-icon/src/locations/Field.tsx
index 6d38875286..f3afd9524e 100644
--- a/apps/phosphor-icon/src/locations/Field.tsx
+++ b/apps/phosphor-icon/src/locations/Field.tsx
@@ -4,7 +4,7 @@ import { css } from 'emotion';
import { FieldAppSDK } from '@contentful/app-sdk';
import { useSDK } from '@contentful/react-apps-toolkit';
import { IconPreview } from '../components/IconPreview/IconPreview';
-import type { IconFieldValue, IconWeight } from '../types/icon';
+import type { IconFieldValue } from '../types/icon';
import { ICON_WEIGHT_LABELS } from '../types/icon';
import type { AppInstallationParameters, DialogInvocationParameters } from '../types/parameters';
import {
@@ -39,8 +39,8 @@ const Field = () => {
const sdk = useSDK();
const [value, setValue] = useState(sdk.field.getValue() ?? null);
const [isOpeningDialog, setIsOpeningDialog] = useState(false);
- const [enabledWeights, setEnabledWeights] = useState(
- parseEnabledWeights((sdk.parameters.installation as AppInstallationParameters)?.enabledWeights)
+ const enabledWeights = parseEnabledWeights(
+ (sdk.parameters.installation as AppInstallationParameters)?.enabledWeights
);
useEffect(() => {
@@ -55,71 +55,9 @@ const Field = () => {
return () => detach();
}, [sdk.field]);
- const fetchLatestInstallationParameters =
- useCallback(async (): Promise => {
- try {
- if (!sdk.ids.app) {
- throw new Error('Required app ID not available');
- }
-
- if (
- sdk.cma?.appInstallation &&
- typeof sdk.cma.appInstallation.getForOrganization === 'function' &&
- sdk.ids.organization &&
- sdk.ids.space &&
- sdk.ids.environment
- ) {
- const appInstallation = await sdk.cma.appInstallation.getForOrganization({
- appDefinitionId: sdk.ids.app,
- organizationId: sdk.ids.organization,
- });
-
- const currentInstallation = appInstallation.items.find(
- (installation) =>
- installation.sys.space.sys.id === sdk.ids.space &&
- installation.sys.environment.sys.id === sdk.ids.environment
- );
-
- if (currentInstallation?.parameters) {
- return currentInstallation.parameters as AppInstallationParameters;
- }
- }
-
- if (sdk.cma?.appInstallation && typeof sdk.cma.appInstallation.get === 'function') {
- const appInstallation = await sdk.cma.appInstallation.get({
- appDefinitionId: sdk.ids.app,
- });
-
- if (appInstallation?.parameters) {
- return appInstallation.parameters as AppInstallationParameters;
- }
- }
- } catch (error) {
- console.warn('Failed to fetch fresh installation parameters from CMA:', error);
- }
-
- return (sdk.parameters.installation as AppInstallationParameters) ?? {};
- }, [sdk]);
-
- useEffect(() => {
- let isMounted = true;
-
- const syncInstallationParameters = async () => {
- const installationParams = await fetchLatestInstallationParameters();
-
- if (!isMounted) {
- return;
- }
-
- setEnabledWeights(parseEnabledWeights(installationParams?.enabledWeights));
- };
-
- void syncInstallationParameters();
-
- return () => {
- isMounted = false;
- };
- }, [fetchLatestInstallationParameters]);
+ const getInstallationParameters = useCallback((): AppInstallationParameters => {
+ return (sdk.parameters.installation as AppInstallationParameters) ?? {};
+ }, [sdk.parameters.installation]);
const openDialog = useCallback(async () => {
if (isOpeningDialog) {
@@ -129,7 +67,7 @@ const Field = () => {
setIsOpeningDialog(true);
try {
- const installationParams = await fetchLatestInstallationParameters();
+ const installationParams = getInstallationParameters();
const enabledWeights = parseEnabledWeights(installationParams?.enabledWeights);
const positionOptions = parsePositionOptions(installationParams?.positionOptions);
const allowedIconNames =
@@ -158,7 +96,7 @@ const Field = () => {
} finally {
setIsOpeningDialog(false);
}
- }, [fetchLatestInstallationParameters, isOpeningDialog, sdk.dialogs, sdk.field, value]);
+ }, [getInstallationParameters, isOpeningDialog, sdk.dialogs, sdk.field, value]);
const handleRemove = useCallback(async () => {
await sdk.field.removeValue();