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();