otherBucket: getOtherBucketSwitchDefault()

in x-pack/platform/plugins/shared/lens/public/datasources/form_based/operations/definitions/terms/index.tsx [736:1137]


                    otherBucket: getOtherBucketSwitchDefault(currentColumn, value),
                  },
                },
              } as Record<string, TermsIndexPatternColumn>,
            });
          }}
        />
        {currentColumn.params.orderBy.type === 'rare' && (
          <ValuesInput
            value={currentColumn.params.orderBy.maxDocCount}
            label={i18n.translate('xpack.lens.indexPattern.terms.maxDocCount', {
              defaultMessage: 'Max doc count per term',
            })}
            maxValue={MAXIMUM_MAX_DOC_COUNT}
            onChange={(value) => {
              paramEditorUpdater(
                updateColumnParam({
                  layer,
                  columnId,
                  paramName: 'orderBy',
                  value: { ...currentColumn.params.orderBy, maxDocCount: value },
                })
              );
            }}
          />
        )}
        <EuiFormRow
          label={
            <>
              {i18n.translate('xpack.lens.indexPattern.terms.orderBy', {
                defaultMessage: 'Rank by',
              })}{' '}
              <EuiIconTip
                color="subdued"
                content={i18n.translate('xpack.lens.indexPattern.terms.orderByHelp', {
                  defaultMessage: `Specifies the dimension the top values are ranked by.`,
                })}
                iconProps={{
                  className: 'eui-alignTop',
                }}
                position="top"
                size="s"
                type="questionInCircle"
              />
            </>
          }
          display="rowCompressed"
          fullWidth
        >
          <EuiSelect
            compressed
            fullWidth
            data-test-subj="indexPattern-terms-orderBy"
            options={orderOptions}
            value={toValue(currentColumn.params.orderBy)}
            onChange={(e: React.ChangeEvent<HTMLSelectElement>) => {
              const newOrderByValue = fromValue(e.target.value);
              let updatedLayer = updateDefaultLabels(
                updateColumnParam({
                  layer,
                  columnId,
                  paramName: 'orderBy',
                  value: newOrderByValue,
                }),
                indexPattern
              );
              if (newOrderByValue.type === 'custom') {
                const initialOperation = (
                  operationDefinitionMap.count as OperationDefinition<
                    GenericIndexPatternColumn,
                    'field'
                  >
                ).buildColumn({
                  layer,
                  indexPattern,
                  field: indexPattern.getFieldByName(DOCUMENT_FIELD_NAME)!,
                });
                updatedLayer = updateColumnParam({
                  layer: updatedLayer,
                  columnId,
                  paramName: 'orderAgg',
                  value: initialOperation,
                });
              } else {
                updatedLayer = updateColumnParam({
                  layer: updatedLayer,
                  columnId,
                  paramName: 'orderAgg',
                  value: undefined,
                });
              }
              setIncompleteColumn(undefined);
              paramEditorUpdater(
                updateColumnParam({
                  layer: updatedLayer,
                  columnId,
                  paramName: 'orderDirection',
                  value: newOrderByValue.type === 'alphabetical' ? 'asc' : 'desc',
                })
              );
            }}
            aria-label={i18n.translate('xpack.lens.indexPattern.terms.orderBy', {
              defaultMessage: 'Rank by',
            })}
          />
        </EuiFormRow>
        {currentColumn.params.orderAgg && ReferenceEditor && (
          <>
            <EuiSpacer size="s" />
            <ReferenceEditor
              operationDefinitionMap={operationDefinitionMap}
              functionLabel={i18n.translate('xpack.lens.indexPattern.terms.orderAgg.rankFunction', {
                defaultMessage: 'Rank function',
              })}
              fieldLabel={i18n.translate('xpack.lens.indexPattern.terms.orderAgg.rankField', {
                defaultMessage: 'Rank field',
              })}
              isInline={true}
              paramEditorCustomProps={{
                ...paramEditorCustomProps,
                isInline: true,
                labels: getLabelForRankFunctions(currentColumn.params.orderAgg.operationType),
              }}
              layer={layer}
              selectionStyle="full"
              columnId={`${columnId}-orderAgg`}
              currentIndexPattern={indexPattern}
              paramEditorUpdater={(setter) => {
                if (!isColumn(setter)) {
                  throw new Error('Setter should always be a column when ran here.');
                }
                paramEditorUpdater(
                  updateColumnParam({
                    layer,
                    columnId,
                    paramName: 'orderAgg',
                    value: setter,
                  })
                );
              }}
              column={currentColumn.params.orderAgg}
              incompleteColumn={incompleteColumn}
              onResetIncomplete={() => setIncompleteColumn(undefined)}
              onDeleteColumn={() => {
                throw new Error('Should not be called');
              }}
              onChooseField={(choice) => {
                const field = choice.field && indexPattern.getFieldByName(choice.field);
                if (field) {
                  const hypotethicalColumn = (
                    operationDefinitionMap[choice.operationType] as OperationDefinition<
                      GenericIndexPatternColumn,
                      'field'
                    >
                  ).buildColumn({
                    previousColumn: currentColumn.params.orderAgg,
                    layer,
                    indexPattern,
                    field,
                  });
                  setIncompleteColumn(undefined);
                  paramEditorUpdater(
                    updateColumnParam({
                      layer,
                      columnId,
                      paramName: 'orderAgg',
                      value: hypotethicalColumn,
                    })
                  );
                } else {
                  setIncompleteColumn({
                    sourceField: choice.field,
                    operationType: choice.operationType,
                  });
                }
              }}
              onChooseFunction={(operationType: string, field?: IndexPatternField) => {
                if (field) {
                  const hypotethicalColumn = (
                    operationDefinitionMap[operationType] as OperationDefinition<
                      GenericIndexPatternColumn,
                      'field'
                    >
                  ).buildColumn({
                    previousColumn: currentColumn.params.orderAgg,
                    layer,
                    indexPattern,
                    field,
                  });
                  setIncompleteColumn(undefined);

                  paramEditorUpdater(
                    updateColumnParam({
                      layer,
                      columnId,
                      paramName: 'orderAgg',
                      value: hypotethicalColumn,
                    })
                  );
                } else {
                  setIncompleteColumn({ operationType });
                }
              }}
              validation={{
                input: ['field', 'managedReference'],
                validateMetadata: (meta: OperationMetadata) =>
                  meta.dataType === 'number' && !meta.isBucketed,
              }}
              {...rest}
            />
            <EuiSpacer size="m" />
          </>
        )}
        <EuiFormRow
          label={i18n.translate('xpack.lens.indexPattern.terms.orderDirection', {
            defaultMessage: 'Rank direction',
          })}
          display="rowCompressed"
          fullWidth
        >
          <EuiButtonGroup
            isFullWidth
            legend={i18n.translate('xpack.lens.indexPattern.terms.orderDirection', {
              defaultMessage: 'Rank direction',
            })}
            data-test-subj="indexPattern-terms-orderDirection-groups"
            buttonSize="compressed"
            aria-label={i18n.translate('xpack.lens.indexPattern.terms.orderDirection', {
              defaultMessage: 'Rank direction',
            })}
            isDisabled={isRareOrSignificant(currentColumn.params.orderBy)}
            options={[
              {
                id: `${idPrefix}asc`,
                'data-test-subj': 'indexPattern-terms-orderDirection-groups-asc',
                value: 'asc',
                label: i18n.translate('xpack.lens.indexPattern.terms.orderAscending', {
                  defaultMessage: 'Ascending',
                }),
              },
              {
                id: `${idPrefix}desc`,
                'data-test-subj': 'indexPattern-terms-orderDirection-groups-desc',
                value: 'desc',
                label: i18n.translate('xpack.lens.indexPattern.terms.orderDescending', {
                  defaultMessage: 'Descending',
                }),
              },
            ]}
            idSelected={`${idPrefix}${currentColumn.params.orderDirection}`}
            onChange={(id) => {
              const value = id.replace(
                idPrefix,
                ''
              ) as TermsIndexPatternColumn['params']['orderDirection'];
              paramEditorUpdater(
                updateColumnParam({
                  layer,
                  columnId,
                  paramName: 'orderDirection',
                  value,
                })
              );
            }}
          />
        </EuiFormRow>
        {dataSectionExtra && (
          <>
            <EuiSpacer size="m" />
            {dataSectionExtra}
          </>
        )}
        {!hasRestrictions && (
          <>
            <EuiSpacer size="m" />
            <EuiAccordion
              css={css`
                color: ${euiTheme.colors.primary};
              `}
              id="lnsTermsAdvanced"
              arrowProps={{ color: 'primary' }}
              buttonContent={
                <EuiTitle size="xxs">
                  <h5>
                    <EuiTextColor color={euiTheme.colors.primary}>
                      {i18n.translate('xpack.lens.indexPattern.terms.advancedSettings', {
                        defaultMessage: 'Advanced',
                      })}
                    </EuiTextColor>
                  </h5>
                </EuiTitle>
              }
              data-test-subj="indexPattern-terms-advanced"
              className="lnsIndexPatternDimensionEditor-advancedOptions"
            >
              <EuiSpacer size="s" />
              <EuiSwitch
                label={
                  <EuiText size="xs">
                    {i18n.translate('xpack.lens.indexPattern.terms.missingBucketDescription', {
                      defaultMessage: 'Include documents without the selected field',
                    })}
                  </EuiText>
                }
                compressed
                disabled={
                  !currentColumn.params.otherBucket ||
                  indexPattern.getFieldByName(currentColumn.sourceField)?.type !== 'string' ||
                  isRareOrSignificant(currentColumn.params.orderBy)
                }
                data-test-subj="indexPattern-terms-missing-bucket"
                checked={Boolean(currentColumn.params.missingBucket)}
                onChange={(e: EuiSwitchEvent) =>
                  paramEditorUpdater(
                    updateColumnParam({
                      layer,
                      columnId,
                      paramName: 'missingBucket',
                      value: e.target.checked,
                    })
                  )
                }
              />
              <EuiSpacer size="s" />
              <EuiSwitch
                label={
                  <EuiText size="xs">
                    {i18n.translate('xpack.lens.indexPattern.terms.otherBucketDescription', {
                      defaultMessage: 'Group remaining values as "Other"',
                    })}
                  </EuiText>
                }
                compressed
                data-test-subj="indexPattern-terms-other-bucket"
                checked={Boolean(currentColumn.params.otherBucket)}
                disabled={isRareOrSignificant(currentColumn.params.orderBy)}
                onChange={(e: EuiSwitchEvent) =>
                  paramEditorUpdater(
                    updateColumnParam({
                      layer,
                      columnId,
                      paramName: 'otherBucket',
                      value: e.target.checked,
                    })
                  )
                }
              />
              <EuiSpacer size="s" />
              <EuiSwitch
                label={
                  <EuiText size="xs">
                    {i18n.translate('xpack.lens.indexPattern.terms.accuracyModeDescription', {
                      defaultMessage: 'Enable accuracy mode',
                    })}{' '}
                    <EuiIconTip
                      color="subdued"
                      content={i18n.translate('xpack.lens.indexPattern.terms.accuracyModeHelp', {
                        defaultMessage: `Improves results for high-cardinality data, but increases the load on the Elasticsearch cluster.`,
                      })}
                      iconProps={{
                        className: 'eui-alignTop',
                      }}
                      position="top"
                      size="s"
                      type="questionInCircle"
                    />
                  </EuiText>
                }
                compressed
                disabled={currentColumn.params.orderBy.type === 'rare'}
                data-test-subj="indexPattern-accuracy-mode"
                checked={Boolean(
                  currentColumn.params.accuracyMode && currentColumn.params.orderBy.type !== 'rare'
                )}
                onChange={(e: EuiSwitchEvent) =>
                  paramEditorUpdater(
                    updateColumnParam({
                      layer,
                      columnId,
                      paramName: 'accuracyMode',
                      value: e.target.checked,
                    })
                  )
                }
              />
              {(currentColumn.dataType === 'number' || currentColumn.dataType === 'string') &&
                !currentColumn.params.secondaryFields?.length && (
                  <>
                    <IncludeExcludeRow
                      include={currentColumn.params.include}
                      exclude={currentColumn.params.exclude}
                      includeIsRegex={Boolean(currentColumn.params.includeIsRegex)}
                      excludeIsRegex={Boolean(currentColumn.params.excludeIsRegex)}
                      tableRows={activeData?.[rest.layerId]?.rows}
                      columnId={columnId}
                      isNumberField={Boolean(currentColumn.dataType === 'number')}
                      updateParams={(operation, operationValue, regex, regexValue) =>
                        paramEditorUpdater({
                          ...layer,
                          columns: {
                            ...layer.columns,
                            [columnId]: {