function SlurmMemorySettings()

in frontend/src/old-pages/Configure/Queues/SlurmMemorySettings.tsx [67:157]


function SlurmMemorySettings() {
  const {t} = useTranslation()
  const memoryBasedSchedulingEnabled = useState(
    memoryBasedSchedulingEnabledPath,
  )
  const isMemoryBasedSchedulingWithMultipleInstanceTypesActive = useFeatureFlag(
    'memory_based_scheduling_with_multiple_instance_types',
  )
  const queues = useState(queuesPath)
  const multipleInstancesTypesSelected = useFeatureFlag(
    'queues_multiple_instance_types',
  )
    ? hasMultipleInstanceTypes(queues)
    : false
  const cannotEnableMemoryBasedScheduling =
    multipleInstancesTypesSelected &&
    !isMemoryBasedSchedulingWithMultipleInstanceTypesActive
  const clearMemoryBasedSettingsState = React.useCallback(() => {
    clearState(memoryBasedSchedulingEnabledPath)
    if (Object.keys(getState(slurmSettingsPath)).length === 0)
      clearState(slurmSettingsPath)
  }, [])

  React.useEffect(() => {
    if (cannotEnableMemoryBasedScheduling) {
      clearMemoryBasedSettingsState()
    }
  }, [clearMemoryBasedSettingsState, cannotEnableMemoryBasedScheduling])

  const toggleMemoryBasedSchedulingEnabled = () => {
    !memoryBasedSchedulingEnabled
      ? setState(memoryBasedSchedulingEnabledPath, true)
      : clearMemoryBasedSettingsState()
  }

  const scaledownIdleTime = useState(scaledownIdleTimePath)
  const queueUpdateStrategy = useState(queueUpdateStrategyPath)

  const onScaledownIdleTimeChange = React.useCallback(
    (value: number | null) => {
      if (!value) {
        clearState(scaledownIdleTimePath)
      } else {
        setState(scaledownIdleTimePath, value)
      }
    },
    [],
  )

  const onQueueUpdateStrategyChange = React.useCallback((value: string) => {
    setState(queueUpdateStrategyPath, value)
  }, [])

  return (
    <Container
      header={
        <Header
          variant="h2"
          info={<InfoLink helpPanel={<SlurmMemorySettingsHelpPanel />} />}
        >
          {t('wizard.queues.slurmMemorySettings.container.title')}
        </Header>
      }
    >
      <SpaceBetween size={'s'} direction={'vertical'}>
        <Checkbox
          checked={memoryBasedSchedulingEnabled}
          disabled={cannotEnableMemoryBasedScheduling}
          onChange={toggleMemoryBasedSchedulingEnabled}
        >
          <Trans i18nKey="wizard.queues.slurmMemorySettings.toggle.label" />
        </Checkbox>
        {cannotEnableMemoryBasedScheduling ? (
          <Alert header={t('wizard.queues.slurmMemorySettings.info.header')}>
            {t('wizard.queues.slurmMemorySettings.info.body')}
          </Alert>
        ) : null}
        <ColumnLayout columns={2}>
          <ScaledownIdleTimeForm
            value={scaledownIdleTime}
            onChange={onScaledownIdleTimeChange}
          />
          <QueueUpdateStrategyForm
            value={queueUpdateStrategy}
            onChange={onQueueUpdateStrategyChange}
          />
        </ColumnLayout>
      </SpaceBetween>
    </Container>
  )
}