export default function ClusterScheduling()

in frontend/src/old-pages/Clusters/Scheduling.tsx [258:354]


export default function ClusterScheduling() {
  const {t} = useTranslation()
  const clusterName = useState(['app', 'clusters', 'selected'])
  const clusterPath = ['clusters', 'index', clusterName]
  const cluster = useState(clusterPath)
  const fleetStatus = useState([...clusterPath, 'computeFleetStatus'])
  const clusterMinor = cluster.version
    ? parseInt(cluster.version.split('.')[1])
    : 0
  const jobs: JobSummary[] = useState([
    'clusters',
    'index',
    clusterName,
    'jobs',
  ])
  const defaultRegion = useState(['aws', 'region'])
  const region = useState(['app', 'selectedRegion']) || defaultRegion

  function isSsmPolicy(p: any) {
    return p.hasOwnProperty('Policy') && p.Policy === ssmPolicy(region)
  }

  const iamPolicies = useState([
    ...clusterPath,
    'config',
    'HeadNode',
    'Iam',
    'AdditionalIamPolicies',
  ])
  const ssmEnabled = iamPolicies && findFirst(iamPolicies, isSsmPolicy)

  React.useEffect(() => {
    const tick = () => {
      clusterMinor > 0 && ssmEnabled && refreshQueues()
    }
    clusterMinor > 0 && ssmEnabled && refreshQueues()
    const timerId = setInterval(tick, 10000)
    return () => {
      clearInterval(timerId)
    }
  }, [clusterMinor, ssmEnabled])

  const selectJobCallback = (jobInfo: any) => {
    setState(['app', 'clusters', 'jobInfo', 'data'], jobInfo)
  }

  const selectJob = (jobId: string) => {
    const clusterName = getState(['app', 'clusters', 'selected'])
    if (clusterName) {
      const clusterPath = ['clusters', 'index', clusterName]
      const cluster = getState(clusterPath)
      let user = clusterDefaultUser(cluster)
      const headNode = getState([...clusterPath, 'headNode'])
      clearState(['app', 'clusters', 'jobInfo', 'data'])
      headNode && setState(['app', 'clusters', 'jobInfo', 'dialog'], true)
      headNode && JobInfo(headNode.instanceId, user, jobId, selectJobCallback)
    }
  }

  const {
    items,
    actions,
    filteredItemsCount,
    collectionProps,
    filterProps,
    paginationProps,
  } = useCollection(
    jobs || [],
    extendCollectionsOptions({
      filtering: {
        empty: (
          <EmptyState
            title={t('cluster.scheduling.filter.empty.title')}
            subtitle={t('cluster.scheduling.filter.empty.subtitle')}
          />
        ),
        noMatch: (
          <EmptyState
            title="No matches"
            subtitle="No jobs match the filters."
            action={
              <Button onClick={() => actions.setFiltering('')}>
                Clear filter
              </Button>
            }
          />
        ),
      },
      sorting: {
        defaultState: {
          sortingColumn: {
            sortingField: 'job_id',
          },
        },
      },
      selection: {},
    }),