@datalayer/core
Version:
**Datalayer Core**
79 lines (78 loc) • 2.98 kB
JavaScript
/*
* Copyright (c) 2023-2025 Datalayer, Inc.
* Distributed under the terms of the Modified BSD License.
*/
import { useLocation } from 'react-router-dom';
import { useNavigate } from './../../hooks';
import { useToast } from './../../hooks';
import { useIAMStore } from '../../state';
import { systemAdminLogin, } from './rests';
const getMockResponse = (request) => {
const { url, method, body } = request;
if (url.match('/api/iam/v1/login$') && method === "POST") {
return systemAdminLogin(body.handle);
}
};
export const useDatalayerMock = (props = { user: undefined, token: undefined }) => {
const location = useLocation();
const navigate = useNavigate();
const iamStore = useIAMStore();
const { enqueueToast } = useToast();
const requestRun = async (request) => {
const { loginRoute = '/login' } = props;
const response = getMockResponse(request);
console.log('Mock request and response', request, response);
if (response) {
return Promise.resolve(response);
}
//
const token_ = request.token ?? iamStore.token;
const headers = {
Accept: 'application/json',
'Content-Type': 'application/json'
};
if (token_) {
headers['Authorization'] = `Bearer ${token_}`;
}
const r = fetch(request.url, {
method: request.method,
headers,
body: request.body ? JSON.stringify(request.body) : undefined,
credentials: token_ ? 'include' : 'omit'
}).then((resp) => {
if (resp.status < 200 || resp.status >= 300) {
if (resp.status === 401) {
console.log('Datalayer RUN sent a 401 return code.');
if (location.pathname !== request.loginRoute) {
iamStore.logout();
navigate(request.loginRoute ?? loginRoute);
}
}
else {
resp.json().then((r) => {
const message = r.message;
const errors = r.errors;
if (errors) {
errors.forEach(error => enqueueToast(`${error}`, { variant: 'error' }));
}
else {
if (message) {
enqueueToast(`API Error: ${message}`, { variant: 'error' });
}
else {
enqueueToast(`API Error`, { variant: 'error' });
}
}
throw new Error(resp.status.toString(), { cause: message });
});
}
}
return resp.json();
});
return r;
};
return {
requestRun,
};
};
export default useDatalayerMock;