export async function checkExplorerForDefaultRegion()

in src/awsexplorer/defaultRegion.ts [51:143]


export async function checkExplorerForDefaultRegion(
    profileName: string,
    awsContext: AwsContext,
    awsExplorer: AwsExplorer
): Promise<void> {
    const profileRegion = awsContext.getCredentialDefaultRegion()

    const explorerRegions = new Set(await awsContext.getExplorerRegions())
    if (explorerRegions.has(profileRegion)) {
        return
    }

    // Explorer does not contain the default region. See if we should add it.
    const config = vscode.workspace.getConfiguration(extensionSettingsPrefix)

    const defaultAction = config.get<OnDefaultRegionMissingOperation>(
        'onDefaultRegionMissing',
        OnDefaultRegionMissingOperation.Prompt
    )

    // Bypass prompt if user has requested to suppress it.
    if (defaultAction === OnDefaultRegionMissingOperation.Add) {
        await awsContext.addExplorerRegion(profileRegion)
        awsExplorer.refresh()

        return
    } else if (defaultAction === OnDefaultRegionMissingOperation.Ignore) {
        return
    }

    // Ask user what to do
    const items = [
        DefaultRegionMissingPromptItems.add,
        DefaultRegionMissingPromptItems.alwaysAdd,
        DefaultRegionMissingPromptItems.ignore,
        DefaultRegionMissingPromptItems.alwaysIgnore,
    ].map<vscode.QuickPickItem>(item => {
        return {
            label: item,
        }
    })

    const picker = createQuickPick({
        options: {
            canPickMany: false,
            ignoreFocusOut: true,
            title: localize(
                'AWS.message.prompt.defaultRegionHidden',
                'Default region "{0}" of profile "{1}" is currently hidden. Show it in {2} Explorer?',
                profileRegion,
                profileName,
                getIdeProperties().company
            ),
        },
        items: items,
    })
    const response = await promptUser({ picker: picker })

    // User Cancelled
    if (!response || response.length === 0) {
        return
    }

    const regionHiddenResponse = response[0].label

    if (
        regionHiddenResponse === DefaultRegionMissingPromptItems.add ||
        regionHiddenResponse === DefaultRegionMissingPromptItems.alwaysAdd
    ) {
        await awsContext.addExplorerRegion(profileRegion)
        awsExplorer.refresh()
    }

    if (
        regionHiddenResponse === DefaultRegionMissingPromptItems.alwaysAdd ||
        regionHiddenResponse === DefaultRegionMissingPromptItems.alwaysIgnore
    ) {
        // User does not want to be prompted anymore
        const action =
            regionHiddenResponse === DefaultRegionMissingPromptItems.alwaysAdd
                ? OnDefaultRegionMissingOperation.Add
                : OnDefaultRegionMissingOperation.Ignore
        await config.update('onDefaultRegionMissing', action, vscode.ConfigurationTarget.Global)
        vscode.window.showInformationMessage(
            localize(
                'AWS.message.prompt.defaultRegionHidden.suppressed',
                // prettier-ignore
                "You will no longer be asked what to do when the current profile's default region is hidden from the Explorer. This behavior can be changed by modifying the '{0}' setting.",
                'aws.onDefaultRegionMissing'
            )
        )
    }
}