Query.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import React from 'react';
  2. import useAppParams from 'lib/hooks/useAppParams';
  3. import TableRenderer from 'components/KsqlDb/Query/renderer/TableRenderer/TableRenderer';
  4. import { ClusterNameRoute } from 'lib/paths';
  5. import {
  6. useExecuteKsqlkDbQueryMutation,
  7. useKsqlkDbSSE,
  8. } from 'lib/hooks/api/ksqlDb';
  9. import type { FormValues } from './QueryForm/QueryForm';
  10. import QueryForm from './QueryForm/QueryForm';
  11. const Query = () => {
  12. const { clusterName } = useAppParams<ClusterNameRoute>();
  13. const executeQuery = useExecuteKsqlkDbQueryMutation();
  14. const [pipeId, setPipeId] = React.useState<string | false>(false);
  15. const sse = useKsqlkDbSSE({ clusterName, pipeId });
  16. const isFetching = executeQuery.isLoading || sse.isFetching;
  17. const submitHandler = async (values: FormValues) => {
  18. const filtered = values.streamsProperties.filter(({ key }) => key != null);
  19. const streamsProperties = filtered.reduce<Record<string, string>>(
  20. (acc, current) => ({ ...acc, [current.key]: current.value }),
  21. {}
  22. );
  23. await executeQuery.mutateAsync(
  24. {
  25. clusterName,
  26. ksqlCommandV2: {
  27. ...values,
  28. streamsProperties:
  29. values.streamsProperties[0].key !== ''
  30. ? JSON.parse(JSON.stringify(streamsProperties))
  31. : undefined,
  32. },
  33. },
  34. { onSuccess: (data) => setPipeId(data.pipeId) }
  35. );
  36. };
  37. return (
  38. <>
  39. <QueryForm
  40. fetching={isFetching}
  41. hasResults={!!sse.data && !!pipeId}
  42. resetResults={() => setPipeId(false)}
  43. submitHandler={submitHandler}
  44. />
  45. {pipeId && !!sse.data && <TableRenderer table={sse.data} />}
  46. </>
  47. );
  48. };
  49. export default Query;