function useMephistoReview()

in packages/mephisto-review-hook/src/index.js [4:69]


function useMephistoReview({
  useMock,
  mock,
  taskId,
  page,
  resultsPerPage,
  filters,
  hostname = "",
} = {}) {
  const [data, setData] = useState(null);
  const [isLoading, setIsLoading] = useState(false);
  const [error, setError] = useState(null);

  const isMock =
    mock !== undefined && (useMock === undefined || useMock === true);

  useEffect(() => {
    if (isMock) {
      return;
    }
    const DATA_URL = taskId
      ? `${hostname}/data/${taskId}`
      : `${hostname}/data?${page ? "page=" + page : ""}${
          resultsPerPage ? "&results_per_page=" + resultsPerPage : ""
        }${filters ? "&filters=" + encodeURIComponent(filters) : ""}`;
    setIsLoading(true);
    fetch(DATA_URL, { method: "GET" })
      .catch((err) => setError({ type: "DATA_RETRIEVAL", error: err }))
      .then((res) => res.json())
      .then((data) => setData(data))
      .catch((err) => setError({ type: "DATA_PARSE", error: err }))
      .then(() => setIsLoading(false));
  }, [taskId, page, resultsPerPage, filters]);

  const submitData = useCallback(
    async (data) => {
      var response = null;
      setIsLoading(true);
      await fetch(`${hostname}/data/${taskId}`, {
        method: "POST",
        body: JSON.stringify(data),
      })
        .catch((err) => setError({ type: "RESPONSE_SUBMIT", error: err }))
        .then((res) => res.json())
        .then((data) => (response = data && (data.result || data.error)))
        .catch((err) => setError({ type: "DATA_PARSE", error: err }))
        .then(() => setIsLoading(false));
      return response;
    },
    [taskId]
  );

  if (isMock) {
    return mock;
  }

  return {
    isLoading: isLoading,
    mode: data && data.mode,
    data: data && data.data,
    isFinished: data && data.finished,
    totalPages: (data && data.total_pages) || 1,
    submit: submitData,
    error: error,
  };
}