in desktop/flipper-ui-core/src/reducers/supportForm.tsx [112:213]
handleSupportFormDeeplinks(store: Store) {
getLogger().track('usage', 'support-form-source', {
source: 'deeplink',
group: this.name,
});
store.dispatch(setStaticView(SupportRequestFormV2));
const selectedAppId = store.getState().connections.selectedAppId;
const selectedClient = store
.getState()
.connections.clients.get(selectedAppId!);
let errorMessage: string | undefined = undefined;
if (selectedAppId) {
const {app} = deconstructClientId(selectedAppId);
const enabledPlugins: Array<string> | null =
store.getState().connections.enabledPlugins[app];
const unsupportedPlugins = [];
for (const requiredPlugin of this.requiredPlugins) {
const requiredPluginEnabled =
enabledPlugins != null && enabledPlugins.includes(requiredPlugin);
if (
selectedClient &&
selectedClient.plugins.has(requiredPlugin) &&
!requiredPluginEnabled
) {
const plugin =
store.getState().plugins.clientPlugins.get(requiredPlugin) ||
store.getState().plugins.devicePlugins.get(requiredPlugin)!;
store.dispatch(
switchPlugin({
selectedApp: app,
plugin,
}),
);
} else if (
!selectedClient ||
!selectedClient.plugins.has(requiredPlugin)
) {
unsupportedPlugins.push(requiredPlugin);
}
}
if (unsupportedPlugins.length > 0) {
errorMessage = `The current client does not support ${unsupportedPlugins.join(
', ',
)}. Please change the app from the dropdown in the support form.`;
logPlatformSuccessRate(`${SUPPORT_FORM_PREFIX}-deeplink`, {
kind: 'failure',
supportedOperation: true,
error: errorMessage,
});
showStatusUpdatesForDuration(
errorMessage,
'Deeplink',
10000,
(payload) => {
store.dispatch(addStatusMessage(payload));
},
(payload) => {
store.dispatch(removeStatusMessage(payload));
},
);
}
} else {
errorMessage =
'Selected app is null, thus the deeplink failed to enable required plugin.';
showStatusUpdatesForDuration(
'Please select an app and the device from the dropdown.',
'Deeplink',
10000,
(payload) => {
store.dispatch(addStatusMessage(payload));
},
(payload) => {
store.dispatch(removeStatusMessage(payload));
},
);
}
store.dispatch(
setSupportFormV2State({
...store.getState().supportForm.supportFormV2,
selectedGroup: this,
}),
);
const pluginsList = getExportablePlugins(store.getState());
store.dispatch(
setSelectedPlugins(
this.getPluginsToSelect().filter((s) => {
return pluginsList.map((s) => s.id).includes(s);
}),
),
);
logPlatformSuccessRate(
`${SUPPORT_FORM_PREFIX}-deeplink`,
errorMessage
? {
kind: 'failure',
supportedOperation: true,
error: errorMessage,
}
: {kind: 'success'},
);
}